XML 1.0增量值(计数器)

时间:2014-04-09 17:18:12

标签: xml xslt xslt-1.0

我想将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时如何设置增量值?

1 个答案:

答案 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。