- 浏览: 71447 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
jinbo0120:
受教了,我还一直存在疑问呢,原来是1.5开始使用的...看来我 ...
5.0for循环 -
persistC:
1、到底在哪用cascade=&q ...
hibernate.hbm.xml总结 -
duanyong:
看到xml就烦。不知道为什么。嘿嘿。
hibernate.hbm.xml总结
看了些关于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>
<?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>
<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: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.0---正则表达式
2009-06-06 16:27 942其实,正则表达式是XPATH2.0定义的,暂且放在XSLT里说 ... -
XSLT2.0----<xsl:analyze-string>
2009-06-06 16:26 894<xsl:analyze-string>是XS ... -
XSLT2.0----<xsl:variable>和<xsl:sequence>
2009-06-06 16:25 2939我们知道,<xsl:variable>可以定义变量 ... -
XSLT2.0----XPATH2.0序列
2009-06-06 16:24 927严格说来XPATH2.0和XSLT2.0并无直接联系,但是XP ... -
XSLT2.0----字符映射
2009-06-06 16:23 646XSLT2.0提供了字符映射功能。 对于特殊字符或特殊字符, ... -
XSLT2.0---临时结果树
2009-06-06 16:23 1002<xsl:variable>可不是新东西了,它 ... -
XSLT2.0---多文件输出
2009-06-06 16:22 936<xsl:result-document>指 ... -
xsl2.0正则
2009-06-05 11:46 1014<xsl:analyze-string>是XSLT ... -
XSLT 2.0 的新特性
2009-06-05 11:44 1507XSLT 2.0 的新特性 关键 ... -
XSLT Designer快速入门指南
2008-12-15 21:07 878目录 概述 配 ... -
XSLT document()函数在IE与Firefox中的区别
2008-12-15 21:07 905XSLT 中 document() 函数的作用是用来访问扩展X ... -
了解XSLT
2008-12-15 21:06 924什么是XSLT? XSLT的英文标准名称为eXtensibl ... -
XSL中count()的使用
2008-12-15 21:05 1016XSL中用count()来取得xml中某种节点的个数 list ... -
XSL学习心得-制作图像超链接
2008-12-15 21:04 758这是我今天学习的时候遇到的另一个问题,做图像超链接要把链接地址 ... -
xslt的简单使用[xml-->html]
2008-12-15 21:03 989XSLT命令[xml格式转换] 1.循环 <xsl:f ... -
XSL中利用xsl:for-each时给每一项添加序号
2008-12-15 21:02 1689经常用for-each来循环读取XML中的某个节点集,但常常需 ... -
第四章:XPath的语法
2008-12-15 21:00 9444.XPath的语法 我们在前 ... -
第三章:XSLT的元素语法
2008-12-15 20:59 860通过前面两章的介绍,我们已经对XSLT的基本概念和它的转换过程 ... -
第二章:XSLT的实例
2008-12-15 20:59 9732. XSLT的实例 2.1 XSLT如何转换XML 2.2 ... -
第一章:XSLT的概念
2008-12-15 20:58 7671.XSLT的概念 1.1 什么是XSLT 1.2 为什么要 ...
相关推荐
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 ...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
——Patrick Smacchia,微软MVP,《C#和.NET 2.0 实战》作者 目录 -------------------------------------------------------------------------------- 第一部分 从这里开始 第1章 LINQ简介 2 1.1 LINQ是...
本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...
内容简介 XQuery是专门针对XML的查询语言,其作用类似于关系数据库的SQL。 本书比较深入全面地介绍了... 25.3 XQuery 1.0/XPath 2.0和XPath 1.0的差别 附录A 内置函数参考 附录B 内置类型 附录C 错误汇总 索引
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) ...
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) ...
10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第11章 使用...
10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第...
10.3.4 分组与合计数据 10.3.5 选择要返回的行 10.3.6 使用子查询 10.4 更新数据库记录 10.5 创建后修改表 10.6 删除数据库中的记录 10.7 表的删除 10.8 删除整个数据库 10.9 进一步学习 10.10 下一章 第...
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) ...