XSLT:在一个xsl:for-each循环中组合来自不同节点的元素时出现问题

时间:2014-12-10 15:48:23

标签: xml xslt-1.0 filemaker

我需要转换类似以下内容(来自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

我不知道为什么......

非常感谢任何帮助!

最好

弗洛里安

1 个答案:

答案 0 :(得分:0)

由于您使用$p设置<xsl:value-of>的值,因此在评估FMP:DATA[$p]时会将其视为字符串值。由于非空字符串是&#34; truthy&#34;,因此将始终选择第一个FMP:DATA元素。

相反,只需在设置select的值时使用p属性:

<xsl:variable name="p" select="position()" />

这将使其被正确地视为数字。