XSLT - 根据节点添加数字

时间:2018-01-25 04:45:48

标签: xml xslt xslt-2.0

我有一个像这样的xml,

<doc>
    <sec>
        <table>
            <footnote>fn1</footnote>
            <p>
                <footnote>fn2</footnote>
            </p>
            <footnote>fn3</footnote>
        </table>
        <table>
            <p>
                <footnote>fn4</footnote>
                <footnote>fn5</footnote>
            </p>
            <footnote>fn6</footnote>
            <footnote>fn7</footnote>
            <footnote>fn8</footnote>
        </table>
    </sec>
    <sec>
        <table>
            <footnote>fn9</footnote>
            <footnote>fn10</footnote>
            <footnote>fn11</footnote>
        </table>
    </sec>
</doc>

我需要对脚注进行编号,以便每次都应该在表格中以1开头,我正在使用XSLT进行转换。

预期的产出是,

<doc>
    <sec>
        <table>
            <footnote>1<s/>fn1</footnote>
            <p>
                <footnote>2<s/>fn2</footnote>
            </p>
            <footnote>3<s/>fn3</footnote>
        </table>
        <table>
            <p>
                <footnote>1<s/>fn4</footnote>
                <footnote>2<s/>fn5</footnote>
            </p>
            <footnote>3<s/>fn6</footnote>
            <footnote>4<s/>fn7</footnote>
            <footnote>5<s/>fn8</footnote>
        </table>
    </sec>
    <sec>
        <table>
            <footnote>1<s/>fn9</footnote>
            <footnote>2<s/>fn10</footnote>
            <footnote>3<s/>fn11</footnote>
        </table>
    </sec>
</doc>

我尝试使用position()函数,我尝试使用count()函数进行计算,但无法找到解决方法。

<xsl:template match="footnote">
        <xsl:variable name="count-pre" select="count(preceding::footnote)-count(ancestor::table/footnote)"/>

        <footnote>
            <xsl:value-of select="$count-pre"/>
            <s/>
            <xsl:apply-templates/>
        </footnote>
    </xsl:template>

有人能建议我使用XSLT做到这一点吗?

1 个答案:

答案 0 :(得分:4)

试试这个:

    <xsl:template match="footnote">
        <footnote>
            <xsl:number from="table" level="any"/>
            <s/>
            <xsl:apply-templates/>
        </footnote>
    </xsl:template>

请参阅http://xsltransform.net/jxN8NpF

处的转化