XSLT 2.0:<xsl:number>条件格式</xsl:number>

时间:2015-03-25 16:29:57

标签: xml xslt xslt-2.0

我有一个客户端,根据存在的总节点数量,希望改变xsl:number元素的格式。

例如,如果节点的总数<1。 101然后格式字符串是&#34; 01&#34;这样1 =&gt;将显示01.

如果节点总数> 100或者&lt; 1001那么字符串格式为&#34; 001&#34;然后1 =&gt; 001,99 =&gt; 099.

我已尝试将format属性中的变量用于xsl:number但我只得到格式字符串&#34; 001&#34;结果10 =&gt; $ 10而不是010.

如果没有对可能的范围使用某些xsl:choose,有没有办法做到这一点?

编辑:

我再次找到解决方案,感谢迈克尔的代码提示:

 <xsl:variable name="total-number-nodes" select="count(//node)"/>
 <xsl:variable name="base-format-string" select="string('000000000000000000000001')"/>
 <xsl:variable name="fomat-string" select="substring($base-format-string, string-length($base-format-string) - string-length(string($total-number-dossiers)) + 1)"/>
 <xsl:number level="multiple" count="node" format="{$fomat-string}"/>

2 个答案:

答案 0 :(得分:2)

尝试:

<xsl:number format="{substring('000', 1, string-length(string($n)))}"/>

其中$ n是一个包含节点数的变量。

答案 1 :(得分:0)

我无法以某种方式编辑原始问题,所以这里是我使用的最终代码,可能是使用translate而不是使用子字符串的更优雅的解决方案....

    <xsl:variable name="total-number-nodes" select="count(//node)"/>
    <xsl:variable name="base-format-string" select="string('000000000000000000000001')"/>
    <xsl:variable name="fomat-string" select="substring($base-format-string, string-length($base-format-string) - string-length(string($total-number-dossiers)) + 1)"/>
    <xsl:number level="multiple" count="node" format="{$fomat-string}"/>