无论父级如何,都获取元素位置()

时间:2010-10-27 15:54:45

标签: xml xslt position

假设您有一个像

这样的xml文档
<parents>
    <parent>
        <element />
        <element />
    </parent>
    <parent>
        <element />
        <element />
    </parent>
</parents>

在处理过程中我需要知道文档中的元素是1, 2, 3, 4,而不是那个,但调用position()将返回1, 2, 1, 2。通常我会修改xml,但是,在这种情况下,它是不可能的,当我处理父2时,我不知何故需要知道它是第一个元素,实际上是元素3

谢谢, -c

2 个答案:

答案 0 :(得分:4)

使用<xsl:number>

这种转变:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="element">
     <xsl:copy>
       <xsl:number level="any" count="element"/>
     </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

应用于提供的XML文档

<parents>
    <parent>
        <element />
        <element />
    </parent>
    <parent>
        <element />
        <element />
    </parent>
</parents>

产生想要的结果

<parents>
    <parent>
        <element>1</element>
        <element>2</element>
    </parent>
    <parent>
        <element>3</element>
        <element>4</element>
    </parent>
</parents>

答案 1 :(得分:1)

知道了,实际上非常简单

<xsl:value-of select="count(preceding::element)"/>