0

我需要转换一个 Excel XML 电子表格,然后我可以将它导入到另一个程序中。对于普通的 XML 文档,我这样做没有问题,但 Excel XML 文档是另一回事。我遇到的问题是从每个单元格中提取我需要的数据。
必须有一些我不知道的咒语将允许我遍历树以获取数据。这是我的样式表的一部分:

<xsl:template match="ss:Table"> 
<xsl:for-each select="ss:Row">
  <Reload>
     <xsl:value-of select="ss:Cell/ss:Data"/>
  </Reload>
  <vio_sta-id>
     <xsl:value-of select="ss:Cell/ss:Data"/>
  </vio_sta-id>
  <vio-first>
     <xsl:value-of select="ss:Cell/ss:Data"/>
  </vio-first>
  <vio-middle> 
      <xsl:value-of select="ss:Cell/ss:Data"/>
  </vio-middle>
  <vio-last>
      <xsl:value-of select="ss:Cell/ss:Data"/>  
  </vio-last>

这是我收到的文档中的“行”。

   <ss:Row>
<ss:Cell><Data ss:Type="String">Reload</Data></ss:Cell>
<ss:Cell><Data ss:Type="Number">21</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">ANTHONY</Data></ss:Cell>
<ss:Cell><Data ss:Type="String"></Data></ss:Cell>
<ss:Cell><Data ss:Type="String">VALDEZ</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">01/28/1982</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">07318386</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">000-00-0000</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">Blank Field</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">638 W BAETZ</Data></ss:Cell>
<ss:Cell><Data ss:Type="String"></Data></ss:Cell>
<ss:Cell><Data ss:Type="String">SAN ANTONIO</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">TX</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">78221</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">06/21/1999</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">3259</Data></ss:Cell>
<ss:Cell><Data ss:Type="Number">165.00</Data></ss:Cell>
<ss:Cell><Data ss:Type="Number">0.00</Data></ss:Cell>
<ss:Cell><Data ss:Type="Number">0.00</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">8880</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">New</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">00/00/0000</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">PENDING</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">FRED NIETO JR.</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">ZIMMERMAN  #700</Data></ss:Cell>
<ss:Cell><Data ss:Type="String">EXP. 1-99::NEW::0</Data></ss:Cell>
<ss:Cell><Data ss:Type="Number">10</Data></ss:Cell>
<ss:Cell><Data ss:Type="Number">5</Data></ss:Cell>

我的输出包括来自第一个单元格的数据一遍又一遍地重复。不知何故,我需要读取节点集,然后前进到下一个......

谢谢

4

1 回答 1

0

更新。我错过了你在第一次阅读时的最后陈述。

您的方法有两个基本问题:

  1. 您正在遍历行,但不是单元格。
  2. 您没有选择特定Data元素。

您的模板应如下所示:

<xsl:for-each select="ss:Row">
        <Reload>
            <xsl:value-of select="ss:Cell[1]/ss:Data"/>
        </Reload>
        <vio_sta-id>
            <xsl:value-of select="ss:Cell[2]/ss:Data"/>
        </vio_sta-id>

   <!-- etc -->

</xsl:for-each>

(原始答案。留下这个以防它仍然有助于理解。)

Data元素没有前缀:

<ss:Cell><Data ss:Type="String">06/21/1999</Data></ss:Cell>

但是您的选择器在它们前面加上ss

<xsl:value-of select="ss:Cell/ss:Data"/>

ss除非默认命名空间恰好也具有与前缀相同的 URI,否则这将不起作用。

尝试将选择器重写为

<xsl:value-of select="ss:Cell/Data"/>
于 2013-07-16T20:02:37.373 回答