我想将XML文件转换为输出中的增量计数器。我试图这样做,但每种方法都失败了。它需要在XSLT-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时如何设置增量值?
答案 0 :(得分: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
,并且可能不是连续的。< / p>
计数从1开始。如果要从零开始计数,则必须减去1。