group-by是XSLT 2.0中xsl:for-each-group的必需属性,用于按表达式值自动分组;需配合current-group()和current-grouping-key()使用,并注意空值、大小写等边界处理。

在XSLT 2.0中,group-by 是 xsl:for-each-group 指令的核心属性,用于按指定表达式对节点序列分组。它不依赖预排序,也不要求数据结构特殊,只要表达式能为每个项目生成一个可比较的值(如字符串、数字、日期等),就能自动聚类。
分组必须包裹在 xsl:for-each-group 中,不能单独使用 group-by:
select 属性指定要遍历的节点序列(比如 //item)group-by 属性指定分组依据的表达式(比如 @category 或 upper-case(name))current-group() 获取全部成员,用 current-grouping-key() 获取当前组的键值按属性值分组:
<xsl:for-each-group select="//product" group-by="@type">
组键是每个 product 的 type 属性值,相同 @type 的产品归为一组。
按子元素文本分组:
<xsl:for-each-group select="//order" group-by="customer/name">
以 customer/name 的字符串值为键,把同一客户的所有订单归为一组。
按计算结果分组(如首字母、年份):
<xsl:for-each-group select="//book" group-by="substring(title,1,1)">
按书名首字母分组;也可用 year-from-date(@pubdate) 按出版年份分组。
进入每组后,通常需要输出汇总或列表:
本文档主要讲述的是j2me3D游戏开发简单教程; 如今,3D图形几乎是任何一部游戏的关键部分,甚至一些应用程序也通过用3D形式来描述信息而获得了成功。如前文中所述,以立即模式和手工编码建立所有的3D对象的方式进行开发速度很慢且很复杂。应用程序中多边形的所有角点必须在数组中独立编码。在JSR 184中,这称为立即模式。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
0
<xsl:value-of select="current-grouping-key()" /> 输出组名(如 “Fiction”)<xsl:for-each select="current-group()"> 遍历该组所有节点count(current-group()) 得到组大小,sum(current-group()/price) 算总价group-by="generate-id()" + 预处理,但更推荐先用 xsl:key 或 distinct-values 配合 for-each空值和空白会影响分组结果:
group-by="@status" 中,缺失 @status 的节点会被分到同一个隐式空组(键为 xs:string(()),即空序列)group-by="normalize-space(@status)" 去首尾空格,或 group-by="if(@status) then @status else 'unknown' 统一缺省值upper-case(@role) 或 lower-case()
基本上就这些。掌握 current-group() 和 current-grouping-key() 这两个核心函数,再结合实际路径或计算表达式,就能灵活应对大多数分组需求。不复杂但容易忽略空值和大小写细节。
以上就是如何用XSLT 2.0中的group-by对数据进行分组?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号