XML 1.0增量值(计数器)



我想将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>

在满足条件的情况下,如何每次都投入增量?

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匹配的实际节点。如果在if测试中使用position()而不是谓词,它还会记录与谓词匹配而不是与if匹配的元素的位置,并且可能不是连续的。

计数从1开始。如果你想从零开始计数,你必须减去1。

相关内容

  • 没有找到相关文章

最新更新