You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用xsl:number为XML节点生成指定格式的层级编号?

解决方案:使用xsl:number生成层级编号

正确的XSLT代码

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text" indent="yes"/>
    
    <xsl:template match="alphabets">
        <xsl:apply-templates select="*"/>
    </xsl:template>
    
    <xsl:template match="*">
        <!-- 根据元素层级生成缩进 -->
        <xsl:value-of select="string-join(for $i in 1 to (count(ancestor::*) - 1) return '  ', '')"/>
        <!-- 生成多级编号 -->
        <xsl:number count="*" level="multiple" format="1."/>
        <!-- 输出元素名称 -->
        <xsl:value-of select="local-name()"/>
        <xsl:text>&#10;</xsl:text>
        <!-- 递归处理子元素 -->
        <xsl:apply-templates select="*"/>
    </xsl:template>
</xsl:stylesheet>

代码说明

  1. 输出格式设置:用method="text"直接输出纯文本,避免HTML标签干扰预期格式。
  2. 层级缩进:通过count(ancestor::*)计算当前元素的深度,每个层级对应2个空格,实现视觉上的层级对齐。
  3. 多级编号生成:xsl:number的level="multiple"会遍历所有祖先层级的元素,结合count="*"统计每个层级的位置,format="1."确保每个层级的编号都以点结尾,自动生成如1.1.1.的多级格式。
  4. 递归处理:模板自动匹配所有元素并递归处理子节点,延续层级编号逻辑。

输出结果

1.A
  1.1.C
    1.1.1.E
    1.1.2.F
      1.1.2.1.G
      1.1.2.2.H
  1.2.D
2.B
  2.1.I

原代码问题分析

  • 原代码输出HTML结构(<ul>、<p>标签),与预期的纯文本格式不符。
  • xsl:number参数设置错误:第一个模板仅统计当前层级,未关联父层级编号;第二个模板的format="1.1."是固定格式,无法适配不同层级的编号长度。
  • 模板匹配逻辑重复,导致元素处理流程混乱。

内容的提问来源于stack exchange,提问作者الجبل العالي

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:56:10