2014-12-03 98 views
1

只能在循环的第一次迭代中添加xls:param我使用的是xsl版本1.0。如果我们有:仅在xsl:for-each循环的第一次迭代中添加xsl:param

<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> 

如果我们在。这是想要的结果:

<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> 

回答

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> 

(我说“有效”,因为XSLT处理器不已经使用实施for-each一个顺序循环XSLT是一种没有副作用的函数式语言,因此处理器可以自由地以任何顺序或甚至并行地处理节点,只要它以正确的方式组装最终输出即可,position()函数返回位置当前正在处理的节点sed,在每个节点的列表中,每个select -ed)。

+0

谢谢你,我过去用过这个,但我完全忘了它! – mybirthname 2014-12-03 12:59:42

相关问题