如何用XSLT对XML节点进行排序 xsl:sort用法

xsl:sort 是 XSLT 中嵌套在 for-each 或 apply-templates 内用于节点排序的指令,支持按子元素、属性、表达式等多级排序,需指定 select、data-type 和 order 属性。

xsl:sort 是 XSLT 中用于对节点集(如 产生的结果)进行排序的核心指令。它不单独使用,必须嵌套在支持排序的指令内部。

基本用法:在 for-each 中排序

最常见场景是对一组同级元素按某个字段升序或降序排列。例如 XML 中有多个 ,想按出版年份排序:


  
  

(出版于 )

说明:
select="year" 指定排序依据的子节点(也可用属性 @id、表达式 price * quantity 等)
data-type="number" 告诉处理器按数值比较(默认是字符串)
order="ascending" 表示升序(可选值为 ascendingdescending

多级排序:按主次条件依次排序

当第一排序字段相同时,可用多个 实现“先按作者姓氏,再按书名”这类复合逻辑:


  
  
  

/

注意:XSLT 按 出现顺序从上到下逐级应用,前面的优先级更高。

按属性或复杂表达式排序

排序依据不限于子元素,也可以是属性、函数结果或组合路径:

  • 按 ID 属性:
  • 按价格降序:
  • 按标题长度(XSLT 1.0 需配合 string-length()):
  • 忽略大小写排序(XSLT 1.0 中常用 translate()):

在 apply-templates 中排序(更推荐的结构化写法)

相比 for-each,用 apply-templates 更符合 XSLT 的声明式风格,排序逻辑同样有效:


  

关键点: 必须直接放在 开始标签和结束标签之间,且在 select 属性之后。