2014-04-09 42 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