如何使用XSLT获取具有指定属性名称的所有前面元素的计数?

时间:2017-02-08 14:48:55

标签: xslt

我有一些包含id属性元素的XML文件。我需要从根元素中按正确的顺序计算id值。所以不是这个:

       <body>
            <p id="1">
                <span id="3"/>
            </p>
            <p/>
            <div id="8">
                <p id="2"/>
                <ul>
                    <li/>
                    <li id="9">
                        <span id="12"/>
                    </li>
                    <li/>
                    <li id="13">
                        <span id="7"/>
                    </li>
                </ul>
            </div>
        </body>

我想有这个:

        <body>
            <p id="1">
                <span id="2"/>
            </p>
            <p/>
            <div id="3">
                <p id="4"/>
                <ul>
                    <li/>
                    <li id="5">
                        <span id="6"/>
                    </li>
                    <li/>
                    <li id="7">
                        <span id="8"/>
                    </li>
                </ul>
            </div>
        </body>

1 个答案:

答案 0 :(得分:1)

使用身份转换模板加一个id属性:

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

<xsl:template match="@id">
    <xsl:attribute name="id">
        <xsl:number count="*[@id]" level="any"/>
    </xsl:attribute>
</xsl:template>

http://xsltransform.net/3NSSEvD