2014-12-03 88 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

相關問題