XSLT 2.0:<xsl:number>&#34;初始化&#34; </xsl:number>

时间:2014-10-15 10:28:39

标签: xml xslt xslt-2.0

有没有办法“初始化”xsl:number元素产生的序列?

例如,如果number将产生以下输出:

1  
1.1  
1.1.1

我希望将它初始化为2,例如它会产生以下结果:

2  
2.1  
2.1.1

依旧......

有没有机会或者我必须创建自己的功能/模板才能实现这一目标?

3 个答案:

答案 0 :(得分:1)

我认为http://www.w3.org/TR/xslt-30/#number具有start-at属性,但您需要使用Saxon 9.6 PE或EE和XSLT 3.0。

答案 1 :(得分:0)

实际上,我认为这不会起作用,但似乎确实有效:

对于此示例输入xml:

<root>
    <item/>
    <item>
        <item/>
    </item>
    <item/>
    <item/>
    <item/>
</root>

并使用此XSLT来测试转换:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <result>
            <xsl:apply-templates/>
        </result>
    </xsl:template>
    <xsl:template match="item">
        <xsl:variable name="currItem">
            <xsl:number count="item" level="multiple"/>
        </xsl:variable>
        <item numer="{$currItem+1}"/>
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>
你可以做到这一点。注意$ currItem + 1,这是初始化发生的地方。

所以结果是:

<?xml version="1.0" encoding="UTF-8"?>
<result>
    <item numer="2"/>
    <item numer="3"/>
    <item numer="3.1"/>
    <item numer="4"/>
    <item numer="5"/>
    <item numer="6"/>
</result>

此致

答案 2 :(得分:0)

这实际上很可能成为新的XSLT 3.0规范。有一个公开错误报告,请参阅https://www.w3.org/Bugs/Public/show_bug.cgi?id=27060,如果接受(看起来那样)将为您提供更高的表达式xsl:number每个级别的起始值。

当然,这需要您使用XSLT 3.0处理器。