计算元素并使用计数

时间:2014-06-27 19:09:51

标签: xml xslt-2.0

我有这个来源:

<blockquote><p> word1<lat:sup/> word2<lat:sup/> word3<lat:sup/> </p></blockquote>

期望的输出:

<blockquote><p>word1<sup>1</sup> word2<sup>2</sup> word3<sup>3</sup></p></blockquote>

我该怎么做? 当然,在真实来源中,可能会有更多<lat:sup/>个。 <p>中可能有多个<blockquote>,但我需要在blockquote中计算lat:sup,忽略p。

1 个答案:

答案 0 :(得分:2)

您可以使用xsl:number

以下是一个示例(为简单起见,删除了lat:前缀)

XML输入

<blockquote>
    <p> word1<sup/> word2<sup/> word3<sup/> </p>
    <p> wordA<sup/> wordB<sup/> wordC<sup/> </p>
</blockquote>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="sup">
        <sup>
            <xsl:number from="blockquote" level="any"/>
        </sup>
    </xsl:template>

</xsl:stylesheet>

<强>输出

<blockquote>
   <p> word1<sup>1</sup> word2<sup>2</sup> word3<sup>3</sup>
   </p>
   <p> wordA<sup>4</sup> wordB<sup>5</sup> wordC<sup>6</sup>
   </p>
</blockquote>