编辑:
我想我在仍然使用 XSLT 1.0 的同时找到了解决这个问题的方法,虽然非常冗长并且可能容易出错。
有没有办法使用<xsl:number>
元素但从零而不是一开始计数,尤其是在使用时level="multiple"
?
我正在使用 XSLT 1.0。
当前结果:1.2.2. Subitem_B
预期结果:0.1.1. Subitem_B
我试过了,format="0"
但它只输出点(即... Subitem_B
)
<xsl:number level="multiple" format="0. "/>
额外问题:我找到了一种使用 的方法translate($number,'.','-')
,但我仍然很想知道是否有一种方法可以使用自定义字符而不是点作为分隔符,甚至format
完全自定义。
XML 输入
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl" version="1.0"?>
<root>
<item>Main_A
<item>Item_A</item>
<item>Item_B
<item>Subitem_A</item>
<item>Subitem_B</item>
</item>
<item>Item_C</item>
</item>
<item>Main_B
<item>Item_A
<item>Subitem_A</item>
</item>
<item>Item_B</item>
</item>
</root>
XSLT 1.0 样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<html>
<body>
<xsl:apply-templates match="item"/>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<xsl:number level="multiple" format="1. "/>
<xsl:apply-templates match="item"/>
</xsl:template>
</xsl:stylesheet>
HTML 输出
<html>
<body>
1. Main_A
1.1. Item_A
1.2. Item_B
1.2.1. Subitem_A
1.2.2. Subitem_B
1.3. Item_C
2. Main_B
2.1. Item_A
2.1.1. Subitem_A
2.2. Item_B
</body>
</html>
如果您的处理器支持 EXSLTstr:tokenize()
扩展功能(正如我认为的那样),您可以执行以下操作:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:template match="/root">
<html>
<body>
<ul>
<xsl:apply-templates select="item"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<xsl:variable name="num">
<xsl:number level="multiple" format="1."/>
</xsl:variable>
<li>
<xsl:text>path:</xsl:text>
<xsl:for-each select="str:tokenize($num, '.')">
<xsl:value-of select=". - 1" />
<xsl:if test="position()!=last()">
<xsl:text>:</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text> = </xsl:text>
<xsl:value-of select="text()" />
<xsl:if test="item">
<ul>
<xsl:apply-templates select="item"/>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
应用于您的输入示例,结果将是:
<html>
<body>
<ul>
<li>path:0 = Main_A
<ul>
<li>path:0:0 = Item_A</li>
<li>path:0:1 = Item_B
<ul>
<li>path:0:1:0 = Subitem_A</li>
<li>path:0:1:1 = Subitem_B</li>
</ul>
</li>
<li>path:0:2 = Item_C</li>
</ul>
</li>
<li>path:1 = Main_B
<ul>
<li>path:1:0 = Item_A
<ul>
<li>path:1:0:0 = Subitem_A</li>
</ul>
</li>
<li>path:1:1 = Item_B</li>
</ul>
</li>
</ul>
</body>
</html>
呈现为:
我相信这是您在其他问题中要求的结果。
请注意,这match
不是 的有效属性xsl:apply-templates
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句