如何用XSLT统计XML段落数并在HTML中显示带编号段落
嘿,刚入门XSLT就能搞定段落总数统计已经很厉害了!要实现带编号的段落展示其实没那么复杂,我给你两种简单实用的方法,结合你的XML示例来讲解:
方法一:用<xsl:number>生成规范编号
<xsl:number>是XSLT专门用来生成编号的元素,灵活性很高,适合这种段落编号场景。下面是完整的XSLT代码:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <html> <body> <!-- 先展示段落总数 --> <p>段落总数:<xsl:value-of select="count(//troonrede/paragraph)"/></p> <!-- 遍历每个段落并添加编号 --> <xsl:for-each select="//troonrede/paragraph"> <p> <!-- count="paragraph" 指定只统计paragraph元素,format定义编号格式 --> <xsl:number count="paragraph" format="1. "/> <!-- 输出段落内容 --> <xsl:value-of select="."/> </p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
这段代码会输出带1. 、2. 前缀的段落,同时保留你之前的总数统计功能。
方法二:用position()函数快速生成编号
如果你需要更简单的实现,直接用<xsl:for-each>里的position()函数就能获取当前段落的序号,代码更简洁:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <html> <body> <p>段落总数:<xsl:value-of select="count(//troonrede/paragraph)"/></p> <xsl:for-each select="//troonrede/paragraph"> <p> <!-- position()返回当前段落的位置序号,直接拼接格式即可 --> <xsl:value-of select="position()"/>. <xsl:value-of select="."/> </p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
小提示
- 两种方法都能满足你的需求:
<xsl:number>适合后续可能有嵌套结构的复杂编号,position()更适合这种平级段落的简单场景。 - 你的XML里的
ë实体,XSLT会自动正确解析成ë,不用额外处理。
内容的提问来源于stack exchange,提问作者Thijmen
相关产品推荐
相关产品推荐

