使用xsl:number进行计算

时间:2015-07-29 20:48:46

标签: xslt

如果我使用xsl:number,我会得到一个数字作为输出文档的文本。但是我该如何添加另一个数字呢? 我正在使用它来跟踪元素,所以可以说它们的索引。 如果我说 <xsl:number/> + $somenumber 我会得到像5 + 6但不是11的东西。

3 个答案:

答案 0 :(得分:3)

尝试在xsl:number中存储xsl:variable并在xsl:value-of(或AVT中执行计算,如果它将成为属性值)。 ..

XML输入

<doc>
    <foo/>
    <foo/>
    <foo/>
    <foo/>
    <foo/>
</doc>

XSLT 1.0

<xsl:stylesheet version="1.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="foo">
        <xsl:variable name="nbr">
            <xsl:number/>
        </xsl:variable>
        <foo attr="{$nbr + 10}"><xsl:value-of select="$nbr + 10"/></foo>
    </xsl:template>

</xsl:stylesheet>

XML输出

<doc>
   <foo attr="11">11</foo>
   <foo attr="12">12</foo>
   <foo attr="13">13</foo>
   <foo attr="14">14</foo>
   <foo attr="15">15</foo>
</doc>

答案 1 :(得分:1)

你能否使用:

robocopy C:\src D:\dst /maxage:20150723 /minage:20150724

否则你必须将<xsl:value-of select="position() + $somenumber" /> 放在另一个变量中,然后使用:

<xsl:number/>

答案 2 :(得分:1)

有时@DanielHaley建议的技术是最好的。有时您可以使用position()代替xsl:number。有时最简单的方法是使用count(preceding-sibling::x)之类的表达来代替xsl:number