`
persistC
  • 浏览: 73506 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XSLT2.0---分组

    博客分类:
  • XSLT
阅读更多

看了些关于XSLT2.0的东西,先来总结一下分组吧。

 <xsl:for-each-group>是XSLT2.0新提出的分组语法。
    XML源文档:
 <?xml version="1.0" encoding="GB2312"?>
 <?xml-stylesheet type="text/xsl" href="sort.xsl"?>
 <root>
  <item f1="浙江" f2="绍兴" f3="aaa"/>
  <item f1="江苏" f2="苏州" f3="bbb"/>
  <item f1="浙江" f2="杭州" f3="ccc"/>
  <item f1="山东" f2="济南" f3="ddd"/>
  <item f1="山东" f2="青岛" f3="aaa"/>
  <item f1="江苏" f2="南京" f3="fff"/>
  <item f1="山东" f2="青岛" f3="ggg"/>
  <item f1="江苏" f2="南京" f3="hhh"/>
  <item f1="山东" f2="济南" f3="iii"/>
 </root>
    XSLT文件:
 <?xml version='1.0'?>
 <
xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <
xsl:template match="/">
      <xsl:for-each-group select="root/item" group-by="@f1">
          <xsl:value-of select="@f1"/>
      </xsl:for-each-group>
  <
/xsl:template>
 <
/xsl:stylesheet>
 输出结果:
 浙江江苏山东
 
 select属性指定分组对象,例如,item;分组标准为具有相同f1属性值的item为一组。
 xsl:for-each-group说明了,循环的因子为group.
    <xsl:value-of select="current-group()/@f2"/>输出每一个group的每个节点的f2属性。
 
 指令换作:
 <xsl:for-each-group select="root/item" group-adjacent="@f1">
 输出结果:
 浙江江苏浙江山东江苏山东江苏山东
 adjacent意为相邻的,临近的。它也是把具有相同的值的节点划为一组,但更严格的条件是,节点必须相邻(连续)。
 
 若指令换作:
 <xsl:for-each-group select="root/item" group-starting-with="item[position() mod 2 =0]">
    则输出结果:
 浙江江苏山东江苏江苏
 可以看出输出了第1,2,4,6,8个item节点的f1属性。也就是说分成了5组,item[1],
item[2,3],item[4,5],item[6,7],item[8,9]
 group-starting-with指定一个模式,符合该模式的节点被作为新的分组的开始,比如,第2,4,6,8个item。而select所指定的第一个节点,无论其是否符合该模式,都作为第一个分组的开开始,比如第一个item。注意,group-starting-with所指定的模式,跟select所指定的节点集合没有任何关系,比如父子关系。可参照
 <xsl:for-each-group select="root/item" group-adjacent="@f1">
group-adjacent所指定的值@f1是root/item的属性。
 
 理解了group-starting-with,那么group-ending-with也就容易理解了。
 
 最后再来看那个“ 用xsl实现排序和判别重复记录 ”中所提到的问题,在XSLT2.0就容易解决了。
 <?xml version='1.0'?>
<
xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<
xsl:template match="/">
 <xsl:for-each-group select="root/item" group-by="@f1">
        <xsl:sort select="@f1"/>
        <xsl:text>
        </xsl:text>
        <xsl:value-of select="concat(@f1,'-')"/>
        <xsl:for-each-group select="current-group()" group-by="@f2">
            <xsl:sort select="@f2"/>
            <xsl:value-of select="concat(' ',@f2,':')"/>
            <xsl:for-each-group select="current-group()" group-by="@f3">
                <xsl:sort select="@f3"/>
                <xsl:value-of select="@f3"/>
                <xsl:if test="position() != last()">,</xsl:if>
            </xsl:for-each-group>
        </xsl:for-each-group>
    </xsl:for-each-group>
<
/xsl:template>
<
/xsl:stylesheet>
 
     呵呵,最后一个小地方,<xsl:for-each-group>下的position()是指当前分组在总组数的位置。
分享到:
评论

相关推荐

    xslt2.0l资料1

    9. **组和分组**:XSLT 2.0提供了`for-each-group`指令,方便对数据进行分组和聚合操作,这对于数据分析和报告生成非常有帮助。 10. **国际化支持**:XSLT 2.0支持多语言处理,可以处理Unicode字符集和国际化格式。...

    Beginning XSLT 2.0 From Novice to Professional

    XSLT的强大之处在于它可以对数据进行筛选、排序、分组等各种复杂的操作。 #### 二、XSLT 2.0的新特性 相较于早期版本,XSLT 2.0引入了许多重要的改进和新功能,这些新特性极大地增强了XSLT的能力。以下是一些关键...

    Beginning XSLT and XPath Transforming XML Documents and Data

    - **XSLT 2.0**: 引入了更多功能强大的特性,如排序、分组等,并且提供了更丰富的数据类型支持,增强了XPath的功能。 #### 关键知识点详解 ##### 第一章:XSLT入门 - **基本概念**:介绍XSLT的基本概念,包括样式...

    XSLT与XPath入门转换XML文档与数据

    - 介绍如何使用XSLT对XML文档中的数据进行排序和分组。 - 包括如何定义排序规则、如何使用`&lt;xsl:sort&gt;`元素以及如何实现数据分组。 - **第6章:字符串、数字、日期和时间** - 介绍XSLT中处理字符串、数字、日期...

    xslt实例(实际例子)

    `&lt;xsl:import&gt;`用于在一个样式表中引入另一个样式表的功能,而`&lt;xsl:export&gt;`在XSLT 2.0及以上版本中用于模块化开发,允许样式表之间共享和重用代码。 6. **流式处理**:XSLT 2.0及更高版本支持流式处理,这意味着...

    XSLT Quickly

    8. **XSLT 2.0及更高版本**:尽管书可能主要基于早期版本的XSLT,但可能也会提及XSLT 2.0引入的新特性,如模式分组、函数库扩展和流式处理等。 9. **实际应用**:书中可能会通过实例演示如何使用XSLT解决实际问题,...

    XSLT从入门到精通(下)

    这部分内容可能涉及如何利用XSLT 2.0及更高版本引入的新功能,如模式分组、变量和参数的引用、以及内置的高阶函数。 五、实际应用和最佳实践 为了使理论知识更好地转化为实际技能,本书可能会包含一些实际案例,...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    2.ASP.NET.2.0.高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox ...15.2.4 使用分组的个性化属性 514 15.2.5 为个性化属性定义类型 514 15.2.6 使用定制的类型 515 ...

    XQuery权威指南(简码·扫描版)

    - 如何对数据进行求和、平均值等统计操作,以及如何根据特定条件进行分组。 #### 三、XQuery基础知识 - **2.1 XQuery语言的设计** - 设计理念和目标,例如简洁性和易用性。 - **2.2 XQuery与其他标准的关系** - ...

    LINQ 实战 1/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 3/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 4/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 2/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 7/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 11/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 5/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

    LINQ 实战 6/11

     ——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...

Global site tag (gtag.js) - Google Analytics