`
persistC
  • 浏览: 71447 次
  • 性别: 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()是指当前分组在总组数的位置。
分享到:
评论

相关推荐

    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 ...

    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 实战 8/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是...

    LINQ 实战 9/11

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

    LINQ 实战 10/11

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

    ASP.NET2.0高级编程(第4版)1/6

    本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...

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

    内容简介 XQuery是专门针对XML的查询语言,其作用类似于关系数据库的SQL。  本书比较深入全面地介绍了... 25.3 XQuery 1.0/XPath 2.0和XPath 1.0的差别 附录A 内置函数参考 附录B 内置类型 附录C 错误汇总 索引

    ASP.NET 3.5 开发大全11-15

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...

    ASP.NET 3.5 开发大全1-5

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 16.1.5 AJAX简单示例 16.2 ASP.NET 3.5AJAX控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) 16.2.3 时间控件(Timer) ...

    PHP和MySQL WEB开发(第4版)

    10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用...

    PHP和MySQL Web开发第4版pdf以及源码

    10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第...

    PHP和MySQL Web开发第4版

    10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第...

    ASP.NET3.5从入门到精通

    16.1.3 ASP.NET 2.0 AJAX 16.1.4 ASP.NET 3.5 AJAX 第一篇窗口与界面编程 19 16.1.5 AJAX 简单示例 16.2 ASP.NET 3.5AJAX 控件 16.2.1 脚本管理控件(ScriptManger) 16.2.2 脚本管理控件(ScriptMangerProxy) ...

Global site tag (gtag.js) - Google Analytics