XSLT中的变量实际上是常量。如果使用递归,则只能将不同的值应用于变量。为了获得您想要的内容,您可以简单地打印节点的
我想将XML文件转换为在输出中具有增量计数器。我试着这么做,但每一种方法都失败了。它需要在XSLT-1.0中被dane。
这是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>
在满足条件的情况下,如何每次都投入增量?
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
匹配的实际节点。如果在if
测试中使用position()
而不是谓词,它还会记录与谓词匹配而不是与if
匹配的元素的位置,并且可能不是连续的。
计数从1开始。如果你想从零开始计数,你必须减去1。