讲师中心 微信公众号
AI工具推荐 视频效率加速

XSLT的xsl:number怎么用 自动编号

云枫吖_7354

云枫吖_7354

发布时间:2026-01-05 11:35:14

|

225人浏览过

|

来源于php中文网

原创

xsl:number的核心用途是结构感知编号,即基于源文档树结构的路径计数器,而非简单递增;它按XPath节点关系动态计算同级或祖先层级的匹配节点位置,支持single/multiple层级、count过滤、from重置起点及value自定义值。

xslt的xsl:number怎么用 自动编号

xsl:number 的核心用途:不是“自动编号”,而是“结构感知编号”

很多人以为 xsl:number 是个傻瓜式递增计数器(像 position() 那样),其实它本质是**基于源文档树结构的路径计数器**。它不依赖模板调用顺序,而是按 XPath 节点关系动态计算——比如“当前 section 在其父 chapter 下排第几个”,或“从最近的 book 开始累计所有 page”。用错场景时,常出现序号跳变、重置失效、跨层级混乱等问题。

最常用组合:count + level="single" 实现同级元素编号

这是新手上手最快、也最容易踩坑的用法。默认 level="single" 表示:只统计与当前节点同级、且匹配 count 表达式的节点中,位于它前面的个数(+1)。

  • count="itemA" → 只数同级的 itemA 元素(忽略 itemB)
  • count="*" → 数所有同级子元素(但要注意命名空间影响)
  • 若没写 count,默认等价于 count="name()",即只数同名同级节点
  • 不加 from 时,计数起点是最近的祖先节点(可能跨多层),容易误触重置逻辑
<xsl:template match="itemA">
  <div><xsl:number count="itemA" format="1." /><xsl:value-of select="."/></div>
</xsl:template>

输出类似:1. a、2. a、3. a……但若中间插了 <itemb></itemb>,序号不会断,因为 count="itemA" 明确过滤了它。

Java注释规范Skills
Java注释规范Skills

当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。

下载

多级编号必须用 level="multiple",别硬套 for-each 嵌套

想实现 “2.3.1” 这类章节编号?不能靠在 xsl:for-each 里嵌套多个 xsl:number,而应一条 xsl:number 统一声明路径:

  • level="multiple" 表示:沿祖先链向上,对每个匹配 count 的节点分别编号,再用 format 拼接
  • count="chapter | section | subsection" 中的管道符是“或”关系,不是层级分隔符
  • format="1.1.1" 的点数必须与 count 中的元素种类数一致(3 个类型 → 3 级)
  • 若某层祖先不匹配 count,该级编号为 0(如 subsection 直接在 root 下,中间无 section,则输出可能是 2.0.1)
<xsl:number 
  count="chapter | section | subsection" 
  level="multiple" 
  format="1.1.1" />

value 和 from 是破局关键,但浏览器兼容性差

当你要格式化一个纯数字(比如数据库 ID)、或强制在某个节点重置计数时,value 和 from 很有用:

  • value="number(@id)" → 把属性值转成编号并按 format 渲染(支持 format="001" 补零)
  • from="book" → 计数只在每个 book 内部独立进行,跨 book 自动重置
  • ⚠️ 注意:format="01"、"a"、"I" 在旧版 IE 和部分 XML 工具链中不支持(Netscape 6 明确不支持)
  • 现代 XSLT 2.0/3.0 支持更好,但若目标环境是 IE 或老旧 Java XSLT 处理器(如 Xalan),建议用 concat(format-number(...), ".") 替代补零需求

真正难的从来不是写对语法,而是理解:编号逻辑绑定的是源 XML 结构,不是 XSLT 执行流。一旦数据结构调整(比如把 itemA 包进新容器),xsl:number 的行为可能完全改变——这点比任何属性都重要。

热门AI工具

更多
创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3368

2023.11.20

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1769

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4704

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6117

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2502

2024.11.28

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2641

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

376

2025.12.22

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn