xsl:sort 排序发生在模板匹配后、生成结果树前的遍历阶段,不改变原始XML结构;它通过 select、order、data-type 等属性控制多级排序顺序,数值排序需用 number() 函数或 data-type="number" 避免字典序错误。

xsl:sort 是 XSLT 中用于对 节点集(node-set)进行排序 的指令,通常配合 xsl:for-each 或 xsl:apply-templates 使用,控制输出结果的排列顺序。
它不改变原始 XML 数据结构,只影响当前模板匹配后、生成结果树时的处理顺序。也就是说:排序发生在“遍历前”,而不是“输出后”。比如你用 xsl:for-each select="book",xsl:sort 就决定这些 book 元素按什么顺序被逐个处理和输出。
放在 xsl:for-each 或 xsl:apply-templates 内部,作为子元素出现。关键属性包括:
select="title"、select="@price"、select="number(price)"
ascending(默认)或 descending
text(默认,字符串比较)、number(数值比较)、date(需格式规范,实际支持依赖处理器)lang="zh" 可适配中文拼音序(非所有处理器都完整支持)在一个 xsl:for-each 或 xsl:apply-templates 中可嵌入多个 xsl:sort,按先后顺序逐级生效。例如:
<xsl:for-each select="book"> <xsl:sort select="category" /> <xsl:sort select="price" data-type="number" order="ascending" /> <xsl:sort select="title" /> <div><xsl:value-of select="title"/></div> </xsl:for-each>
这表示:先按分类分组,同类中按价格升序,价格相同时再按书名字符串排序。
如果 price 是字符串形式(如 <price>100</price>),直接 select="price" 会按字典序排("20" > "100")。必须显式转为数值:
data-type="number"(简单但兼容性有限)select="number(price)",配合 data-type="number" 或不设(XSLT 2.0+ 中 number() 返回数字类型,自动数值比较)基本上就这些。排序逻辑清晰,但细节(比如类型处理、多级优先级、空值位置)容易忽略,写的时候盯住 select 表达式和 data-type 就不容易出错。
以上就是XSLT中的xsl:sort是什么,如何对输出结果进行排序?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号