我需要转换类似以下内容(来自FileMaker FMPXMLRESULT导出的代码段)
<ROW>
<COL>
<DATA>A</DATA>
<DATA>B</DATA>
<DATA>C</DATA>
</COL>
<COL>
<DATA>1</DATA>
<DATA>2</DATA>
<DATA>3</DATA>
</COL>
</ROW>
进入xls.file,其中相应的DATA元素放在彼此相邻的单独单元格中。
使用以下代码
<xsl:for-each select="FMP:COL[1]/FMP:DATA">
<xsl:variable name="p"><xsl:value-of select="position()"/></xsl:variable>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="."/>
</Data>
</Cell>
<Cell>
<Data ss:Type="String">
<xsl:value-of select="../../FMP:COL[2]/FMP:DATA[$p]"/>
</Data>
</Cell>
</xsl:for-each>
仅返回
A 1
B 1
C 1
代替
A 1
B 2
C 3
我不知道为什么......
非常感谢任何帮助!
最好弗洛里安
答案 0 :(得分:0)
由于您使用$p
设置<xsl:value-of>
的值,因此在评估FMP:DATA[$p]
时会将其视为字符串值。由于非空字符串是&#34; truthy&#34;,因此将始终选择第一个FMP:DATA
元素。
相反,只需在设置select
的值时使用p
属性:
<xsl:variable name="p" select="position()" />
这将使其被正确地视为数字。