2014-04-09 68 views
1

我想將XML文件轉換爲在輸出中具有增量計數器。我試圖這樣做,但每種方法都失敗了。它需要在XSLT-1.0中是丹麥人。XML 1.0增量值(計數器)

這是XML樣式的片段,該片段是不行的,但你會得到的想法:

<tripSequence> 
    <xsl:variable name="cnt" select="0"/> 
    <xsl:for-each select="BODY/DBOUT/TRIP/PLANCOMPONENTS/*[starts-with(name(),'NO')]"> 
     <xsl:if test="TYPE = 'PICKUP' or TYPE = 'DELIVERY'"> 
      <numberInSequence><xsl:value-of select="$cnt"/></numberInSequence> 
      <xsl:variable name="cnt" select="$cnt + 1"/> 
     </xsl:if> 
    </xsl:for-each> 
</tripSequence> 

如何IF-condtion被滿足時,每次把增值?

回答

2

XSLT中的變量實際上是常量。如果使用遞歸,則只能將不同的值應用於變量。爲了得到你想要的東西,你可以簡單地打印節點的position()與環中的謂詞替換if測試:

<tripSequence> 
    <xsl:for-each select="BODY/DBOUT/TRIP/PLANCOMPONENTS/*[starts-with(name(),'NO')][TYPE = 'PICKUP' or TYPE = 'DELIVERY']"> 
     <numberInSequence><xsl:number value="position()"/></numberInSequence> 
    </xsl:for-each> 
</tripSequence> 

這將只計算匹配for-each實際節點。如果使用position()if測試代替謂詞,則它還會記錄與謂詞匹配的元素的位置,而不是if,並且可能不是順序的。

計數從1開始。如果要從零開始計數,則必須減去1.

+0

非常感謝!它幫助! – luk452