有没有办法“初始化”xsl:number元素产生的序列?
例如,如果number将产生以下输出:
1
1.1
1.1.1
我希望将它初始化为2,例如它会产生以下结果:
2
2.1
2.1.1
依旧......
有没有机会或者我必须创建自己的功能/模板才能实现这一目标?
答案 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处理器。