如何根据XSLT的位置添加数字作为元素的属性?

时间:2016-09-03 13:45:57

标签: xml xslt

我有很多长诗,我想用五行来编号,用一个属性来存储他们的位置。

输入:

<lg>
           <l>Tú, que del sacro artífice del oro,</l>
           <l>científica y hermosa, procediste,</l>
           <l>Circe, que al blanco cisne, al rubio toro,</l>
           <l>en variedad de formas excediste,</l>
           <l>de la excelencia del castalio coro</l>
           <l>la humilde musa de mis versos viste;</l>
           <l>harás que las corrientes del Leteo</l>
           <l>presuman otra vez que canta Orfeo.</l>
        </lg>
        <lg>
           <l>Tú, que pudiste dar con imperiosa</l>
           <l>voz (que tembló sin resistencia alguna</l>
           <l>el sol en su corona luminosa</l>
           <l>y en su argentado cóncavo la luna)</l>
           <l>naturaleza no, mas prodigiosa</l>
           <l>forma a la humana que corrió fortuna</l>
           <l>en el tirreno mar, con nueva forma</l>
           <l>en platónico cisne me transforma.</l>
        </lg>

期望的输出:

<lg>
               <l>Tú, que del sacro artífice del oro,</l>
               <l>científica y hermosa, procediste,</l>
               <l>Circe, que al blanco cisne, al rubio toro,</l>
               <l>en variedad de formas excediste,</l>
               <l n="5">de la excelencia del castalio coro</l>
               <l>la humilde musa de mis versos viste;</l>
               <l>harás que las corrientes del Leteo</l>
               <l>presuman otra vez que canta Orfeo.</l>
            </lg>
            <lg>
               <l>Tú, que pudiste dar con imperiosa</l>
               <l n="10">voz (que tembló sin resistencia alguna</l>
               <l>el sol en su corona luminosa</l>
               <l>y en su argentado cóncavo la luna)</l>
               <l>naturaleza no, mas prodigiosa</l>
               <l>forma a la humana que corrió fortuna</l>
               <l n="15">en el tirreno mar, con nueva forma</l>
               <l>en platónico cisne me transforma.</l>
            </lg>

我想我必须定义一个参数,计算并添加值,但我无法找到解决方案。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用xsl:number获取文档中l元素的计数,然后测试它是否可以被5整除以输出属性。

试试这个XSLT

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

    <xsl:template match="l">
        <xsl:variable name="n">
            <xsl:number level="any" />
        </xsl:variable>
        <xsl:copy>
            <xsl:if test="$n mod 5 = 0">
                <xsl:attribute name="n">
                    <xsl:value-of select="$n" />
                </xsl:attribute>
            </xsl:if>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

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