新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → XSLT2.0新特性体验之一——分组的简化[原创] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 47477 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XSLT2.0新特性体验之一——分组的简化[原创] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客楼主
    发贴心情 XSLT2.0新特性体验之一——分组的简化[原创]

    XSLT2.0已经出来时间不短了,由于时间关系一直没有好好去看,最近抽点时间和大家一起讨论一下喽:)
    XSLT2.0相比1.0增加了五个比较激动人心的功能
    今天就来看看第一个:支持分组了。在1.0中我们要对XML分组虽然可以使用很多方式,但是就算最出名的Muenchian虽然灵巧但是其复杂耗内存的方法并不受人们的推崇,在2.0中有了直接的支持,使得XML中的分组不再令人生畏,下面我们就来比较一下1.0和2.0中的分组:
    数据文件:node.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml:stylesheet type="text/xsl" href="1.xsl"?>
    <root>
     <node a="a1" b="b1"/>
     <node a="a2" b="b1"/>
     <node a="a2" b="b2"/>
     <node a="a3" b="b2"/>
    </root>
    目标结果输出:
    The a: a1  a2  a3  
    The b: b1  b2  


    在1.0中没有直接的分组功能必须自己想办法来进行处理,我就拿Muenchian方法来做例子了(毕竟是最灵巧的方法,呵呵)
    1.xsl(1.0版):
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     <xsl:key name="nodeA" match="node" use="@a"/>
     <xsl:key name="nodeB" match="node" use="@b"/>
     <xsl:template match="root">
      The a:
      <xsl:for-each select="./node[generate-id(.)=generate-id(key('nodeA',@a))]">
       <xsl:value-of select="@a"/> 
      </xsl:for-each>
      <br/>
      The b:
      <xsl:for-each select="./node[generate-id(.)=generate-id(key('nodeB',@b))]">
       <xsl:value-of select="@b"/> 

      </xsl:for-each>
     </xsl:template>
    </xsl:stylesheet>

    设定两个key值,一个名字为nodeA,一个为nodeB。他们分别都是对于node这个节点进行分组设定的,只是分组所使用的内容不同,nodeA使用的是node的a属性,nodeB使用的是b属性。
    generate-id(node-set):
    The generate-id function returns a string that uniquely identifies the node in the argument node-set that is first in document order.
    该函数会返回节点在整个文档中的唯一标识。
    node-set key(string, object)
    第一个参数是key名字,就是前面定义的<xsl:key的名字,object表示那个内容和key中的内容进行匹配,key('nodeA',@a)就是返回了第一个和当前节点的匹配内容相同的文档中的节点。
    在上述的xsl中,我们添加进这样一段
    <xsl:for-each select="./node">
     <xsl:value-of select="generate-id(.)"/> 
     <xsl:value-of select="generate-id(key('nodeA',@a))"/>
     <br/>
    </xsl:for-each>
    可以看到输出值是
    IDAWHIYF  IDAWHIYF
    IDAZHIYF  IDAZHIYF
    IDA2HIYF  IDAZHIYF
    IDATGIYF  IDATGIYF
    可以看到空格前的四个数据是完全不相同的,也就是每一个节点的唯一标示,使随机生成并没有固定值,但空格后的数据第二个和第三个是相同的。我们可以看一下xml数据的第二个和第三个节点:
    <node a="a2" b="b1"/>
    <node a="a2" b="b2"/>
    他们的a属性是相同,所以说明key('nodeA',@a)在处理到第三个节点<node a="a2" b="b2"/>时返回的是符合key的第一个节点,也就是<node a="a2" b="b1"/>。
    通过这种"./node[generate-id(.)=generate-id(key('nodeA',@a))]"方式就剔除重复的内容,达到了分组效果,解析结果就是:
    The a: a1  a2  a3  
    The b: b1  b2  

    是不是很复杂啊,xslt2.0解决了这个难题,我们看一下2.0的程序:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes">
     <xsl:output method="html"/>
     <xsl:template match="root">
      The a:
      <xsl:for-each-group select="node" group-by="@a">
       <xsl:value-of select="@a"/>> 
      </xsl:for-each-group>
      <br/>
      The b:
      <xsl:for-each-group select="node" group-by="@b">
       <xsl:value-of select="@b"/>> 
      </xsl:for-each-group>
     </xsl:template>
    </xsl:stylesheet>


    只是使用了一个语句:for-each-group 通过group-by属性就将数据进行了分组,和SQL中的group-by很像对吗?它本身还有一些属性设置,往后再一一道来。

    这篇文章的目的告诉大家,虽然xslt2.0的内容多了,但是对于一些操作确是简化了不少:)


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/30 17:13:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客2
    发贴心情 
    55555~~~~~ 我写的东西总是没人看,失败啊。哪里写的不好也要提出来啊,不然都没有兴趣写了。我知道我的表达差,但是大家也要给意见啊。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/31 11:10:00
     
     殷千炀 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:17
      积分:122
      门派:XML.ORG.CN
      注册:2005/3/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给殷千炀发送一个短消息 把殷千炀加入好友 查看殷千炀的个人资料 搜索殷千炀在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看殷千炀的博客3
    发贴心情 
    很好很好~加油加油!!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/31 16:36:00
     
     sam 帅哥哟,离线,有人找我吗?
      
      
      头衔:日夜灌水W3C
      等级:大三暑假(ITELS考了7分!)
      文章:198
      积分:969
      门派:XML.ORG.CN
      注册:2004/3/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sam发送一个短消息 把sam加入好友 查看sam的个人资料 搜索sam在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问sam的主页 引用回复这个贴子 回复这个贴子 查看sam的博客4
    发贴心情 
    让admin给你 精 一下

    ----------------------------------------------
    http://www.xml.org.cn/uploadFace/3819_20044191991837196.gif^_^

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/4/1 13:37:00
     
     jx27 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(汇编考了97分!)
      文章:37
      积分:447
      门派:XML.ORG.CN
      注册:2005/6/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jx27发送一个短消息 把jx27加入好友 查看jx27的个人资料 搜索jx27在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jx27的博客5
    发贴心情 
    不错!我还想知道一下XSL2的其他情况!!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/21 8:45:00
     
     chenshijun 帅哥哟,离线,有人找我吗?魔羯座1982-1-9
      
      
      等级:大三暑假(TOFEL考了660分!)
      文章:52
      积分:917
      门派:XML.ORG.CN
      注册:2005/5/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给chenshijun发送一个短消息 把chenshijun加入好友 查看chenshijun的个人资料 搜索chenshijun在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看chenshijun的博客6
    发贴心情 
    我还要看XSLT2.0其他内容
    望提供
    Thank you
    !
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/24 18:45:00
     
     smxwjd 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:13
      积分:132
      门派:XML.ORG.CN
      注册:2004/8/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给smxwjd发送一个短消息 把smxwjd加入好友 查看smxwjd的个人资料 搜索smxwjd在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看smxwjd的博客7
    发贴心情 
    XLST 多文件输出,不知道楼主有没有此类资料或代码?

    Thank You^_^

    ----------------------------------------------
    [URL=http://wpa.qq.com/msgrd?V=1&Uin=52852011&Site=oa.sanquan.com:1080&Menu=yes]QQ留言[/URL]/[URL=mailto:9911211@163.com]邮件[/URL] Service+XSL+XML+WML+VML=全方位服务

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/1 21:14:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客8
    发贴心情 
    以下是引用smxwjd在2005-7-1 21:14:57的发言:
    XLST 多文件输出,不知道楼主有没有此类资料或代码?

    Thank You^_^



    XSLT2.0增加了<xsl:result-document>,可实现多文档输出,用它GOOGLE一下,答案就在其中。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/2 14:59:00
     
     smxwjd 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:13
      积分:132
      门派:XML.ORG.CN
      注册:2004/8/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给smxwjd发送一个短消息 把smxwjd加入好友 查看smxwjd的个人资料 搜索smxwjd在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看smxwjd的博客9
    发贴心情 
    请问楼主,知道哪几个解析器支持XSLT2.0吗?

    谢谢,不知道IE6.0中的MSXML3.0支持XSLT2.0吗?

    ----------------------------------------------
    [URL=http://wpa.qq.com/msgrd?V=1&Uin=52852011&Site=oa.sanquan.com:1080&Menu=yes]QQ留言[/URL]/[URL=mailto:9911211@163.com]邮件[/URL] Service+XSL+XML+WML+VML=全方位服务

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/4 10:29:00
     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客10
    发贴心情 
    XMLSpy 2005是支持XSLT 2.0 的

    以下是引用smxwjd在2005-7-4 10:29:41的发言:
    请问楼主,知道哪几个解析器支持XSLT2.0吗?

    谢谢,不知道IE6.0中的MSXML3.0支持XSLT2.0吗?


    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/7/5 0:16:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/3 23:22:54

    本主题贴数16,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    1,078.125ms