仅在xsl:for-each循环的第一次迭代时添加xsl:param

时间:2014-12-03 12:38:43

标签: xml xslt

我是否可以仅在循环的第一次迭代中添加xls:param我正在使用xsl版本1.0 。如果我们有:

  <TestObject>
    <xsl:for-each select="TestObject">
      <item>
        <ParamValue>
          <xsl:value-of select='$Test'/>
        </ParamValue>            
        <TEXT>
          <xsl:value-of select="Text" />
        </TEXT>
    </xsl:for-each>
  </TestObject>

如果Text中有3个TestObject。这是想要的结果:

  <TestObject>       
      <item>
        <ParamValue>
          Value of the parameter
        </ParamValue>            
        <TEXT>
          Text1
        </TEXT>
      </item>
      <item>
        <ParamValue></ParamValue>            
        <TEXT>
          Text2
        </TEXT>
      </item>
      <item>
        <ParamValue></ParamValue>            
        <TEXT>
          Text3
        </TEXT>
      </item>
  </TestObject>

1 个答案:

答案 0 :(得分:2)

position()函数有效地为您提供迭代编号:

  <TestObject>
    <xsl:for-each select="TestObject">
      <item>
        <ParamValue>
          <xsl:if test="position() = 1"><xsl:value-of select='$Test'/></xsl:if>
        </ParamValue>            
        <TEXT>
          <xsl:value-of select="Text" />
        </TEXT>
    </xsl:for-each>
  </TestObject>

(我说&#34;有效&#34;因为XSLT处理器没有 使用顺序循环来实现for-each。XSLT是一种没有边的功能语言因此处理器可以自由地以任何顺序或甚至并行处理节点,只要它以正确的方式组装最终输出.location()函数返回当前正在处理的节点的位置,在列表中节点,for-each select - ed)。