使用xpath获取每个元素的位置

时间:2014-07-09 15:06:33

标签: xml xslt xpath

我想用xslt添加每个element的数量。 我的XML结构如下:

<root>
    <element1/>
    <element2/>
    <element3/>
</root>

它应该在浏览器中显示如下:

[1] element1
[2] element2
[3] element3

我用<xsl:value-of select="position()"/>尝试过,但是这个数字翻了一倍,看起来像这样:

[2] element1
[4] element2
[6] element3

我做错了什么?还有另一种可能性来获得每个element的实际位置吗?

这是我的XSL:

<xsl:template match="/root/*">
    <p>
    <xsl:element name="div">
    [<xsl:value-of select="position()" />]
            <xsl:attribute name="class">entry<xsl:value-of select="@type"/></xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
    </p>
</xsl:template>

1 个答案:

答案 0 :(得分:1)

由于text()个节点,这个数字翻了一番。请尝试使用xsl:number代替...

<div>[<xsl:number count="*"/>] <xsl:value-of select="name()"/></div>

此外,您不能将xsl:attribute放在现在的位置,因为您已经输出了该元素的子元素。你可以做这样的事情(尽管你不会得到xsl:apply-templates的名字)......

<p>
    <div class="entry{@type}">
        [<xsl:number count="*"/>]
        <xsl:apply-templates/>
    </div>
</p>