xslt-如何为每个节点增加计数器

时间:2018-10-31 08:37:38

标签: xslt

我是xslt的新手。我在下面输入了xml

<Delivery>
<Item>
    <ItemNo>0010</ItemNo>
    <Material>GB123SS</Material>
</Item>
<Item>
    <ItemNo>0011</ItemNo>
    <Material>ST435DL</Material>
</Item>
<Item>
    <ItemNo>0020</ItemNo>
    <Material>YY902TU</Material>
</Item>
<Item>
    <ItemNo>0030</ItemNo>
    <Material>AW999AA</Material>
</Item>

我想得到这个输出:

1GB123SS
2ST435DL
3YY902TU
4AW999AA

我的要求是将(Item / ItemNo)显示为编号1,2,3,4,而不是0010,0011,0020和0030。

很高兴有人可以给我一些实现方法的想法。 谢谢。

1 个答案:

答案 0 :(得分:0)

您必须像下面这样使用职位:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="/">
        <xsl:for-each select="Delivery/Item">
            <xsl:value-of select="concat(position(), ' ', Material, '&#x000a;')"/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

或xsl:number:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="/">
        <xsl:for-each select="Delivery/Item">
            <xsl:number/>
            <xsl:value-of select="concat(' ', Material, '&#x000a;')"/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>