欢迎光临极品网,更多、更新的资源信息尽在Jpinw.Com!本站所有信息资源每日更新新的内容,请大家继续关注www.Jpinw.com!如果觉得本站还不错,对您有帮助,别忘了向您的朋友推荐本站!请记好本站网址:http://www.Jpinw.com,网站发展靠大家多多的支持!!!

极品网 极品课件 极品论文 极品文学 极品游戏 极品美容 极品手机资源 极品股票

#
免费资源: 免费域名 | 免费空间 | 免费推广 | 免费邮箱 | 免费硬盘 | 免费论坛 | 免费留言 | 免费统计 | 在线投稿 | 更多...
电脑学院: 操作系统 | 安全相关 | 网页设计 | 编程开发 | 建站经验 | 服务器类 | 黑客攻防 | 菜鸟入门 | 教你网赚 | 更多...
文章导航: 网赚学堂 | 网赚秘笈 | 网赚三维 | 网赚先锋 | 网赚资讯 | 感悟网赚 | 众生百态 | 经典美文 | 范文中心 | 更多...
图酷天下: 时事图酷 | 娱乐图酷 | 搞笑图酷 | 时尚图酷 | 体育图酷 | 另类经典 | 论文资源 | 课件下载 | 文学知识 | 更多...

您现在的位置: 极品网 >> 电脑学院 >> 编程开发 >> XML >> 教程正文

筛选和排序XML数据          【字体:
筛选和排序XML数据
作者:佚名    教程来源:不详    点击数:    更新时间:2006-6-5    

 








    在接下来的两节中,你将学习利用XSL 样式表来筛选和排序XML 数据的基本方法。然后,你将看到某些范例样式表,示范筛选和排序的方法。

筛选

    你已经了解,指定match 或select 属性的值是样本,该样本会对应到XML 文件中的一个或多个元素。(你可以使用template 元素的match 属性,value-of、for-each 和apply-templates 元素的select 属性,来达到相同的目的。)截至目前为止你所见过的样本,都只包含一个路径运算子,而此路径运算子指定了元素名称,可能也指定了一个以上的父元素名称。你可以更进一步地限制样本对应到元素的个数,并藉由在路径运算子后加入一个筛选运算子,此筛选运算子以中括号([])表示。例如,下面指定到match 属性的样本指出一个对应元素,名称为BOOK,而且它必须包含一个拥有文字「trade paperback」的BINDIN 子元素:

    简单地在筛选运算子中加入一个元素名称,使对应到的元素皆具有此子元素。例如,下面所示的样本,对应到任何具有子元素CD 的ITEM 元素,不用考虑子元素CD 中的内容:
match="ITEM [CD]"
    接下来的样本,对应到任何具有COLOR 子元素的SHIRT 元素,而且子元素COLOR 还须符合具有文字「red」的条件:
match="SHIRT [COLOR='red']"
    相反地,下面的样本对应到任何具有子元素COLOR 的SHIRT 元素,而且子元素COLOR 还须符合不具有文字「red」的条件:
select="SHIRT [COLOR!='red']"
注意
    如果元素拥有多个子元素,这些子元素的名称皆符合筛选运算子中指定的筛选条件时,则样本的比较运算子将只适用于第一个符合条件的子元素。例如,如果SHIRT 元素拥有两个子COLOR元素,样本"SHIRT[COLOR='red']"将只对应到第一个具有文字「red」的COLOR 子元素。

排序

    在此章中,你已看到可以使用for-each 和apply-templates 两个元素来处理重复元素。你可以使用这些元素的order-by 属性来控制浏览器处理这些元素的顺序,藉以排序显示的XML 资料。
    你可以藉由分号的使用,来将order-by 属性设定成一个以上的样本,以分号区隔。浏览器将使用样本排列的顺序来排序这些元素。你可以在每个样本前加上符号「+」或「-」,来指定是递增或递减排序。
    例如,下面for-each 元素的order-by 属性设定会使得浏览器以作者的姓来递增排序BOOK 元素,而当具有相同姓时,则以名字来递增排序:
    <xsl:for-each select="INVENTORY/BOOK" order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME">
    下面则为另一个范例,范例中属性order-by 的设定,将以书名来递减排序BOOK 元素:
<xsl:apply-templates select="INVENTORY/BOOK" order-by="-TITLE">
    在属性order-by 中指定的路径运算子,是相对于select 属性中指定样本的相对位置。因此,在这个范例中,属性order-by 设定为「-TITLE」,对应到元素INVENTORY 的子元素BOOK 中的TITLE 元素

进行筛选和排序的样式表范例

    本节提出两个XSL 样式表范例,由列表10-6 和10-7 提供。这些范例将显示筛选和排序BOOK元素的结果。你可以在随书光盘的 XslDemo04.xsl 和 XslDemo05.xsl 档案中找到。
XslDemo04.xsl
<?xml version="1.0"?>
<!--File Name:XslDemo04.xsl-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Book Inventory</H2>
<xsl:for-each
select="INVENTORY/BOOK [BINDING='trade
paperback']"
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME">
<SPAN STYLE="font-style:italic">Author:</SPAN>
<xsl:value-of select="AUTHOR"/><BR/>
<SPAN STYLE="font-style:italic">Title:</SPAN>
<xsl:value-of select="TITLE"/><BR/>
<SPAN STYLE="font-style:italic">Binding
type:</SPAN>
<xsl:value-of select="BINDING"/><BR/>
<SPAN STYLE="font-style:italic">Number of
pages:</SPAN>
<xsl:value-of select="PAGES"/><BR/>
<SPAN STYLE="font-style:italic">Price:</SPAN>
<xsl:value-of select="PRICE"/><P/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
列表10-6.
XslDemo05.xsl
<?xml version="1.0"?>
<!--File Name:XslDemo05.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Book Inventory</H2>
<xsl:apply-templates select="INVENTORY/BOOK"
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME"/>
</xsl:template>
<xsl:template match="BOOK [BINDING='trade paperback']">
<SPAN STYLE="font-style:italic">Author:</SPAN>
<xsl:value-of select="AUTHOR"/><BR/>
<SPAN STYLE="font-style:italic">Title:</SPAN>
<xsl:value-of select="TITLE"/><BR/>
<SPAN STYLE="font-style:italic">Binding type:</SPAN>
<xsl:value-of select="BINDING"/><BR/>
<SPAN STYLE="font-style:italic">Number of pages:</SPAN>
<xsl:value-of select="PAGES"/><BR/>
<SPAN STYLE="font-style:italic">Price:</SPAN>
<xsl:value-of select="PRICE"/><P/>
</xsl:template>
</xsl:stylesheet>
    这两个样式表范例,都是设计被连结至列表10-4 的XML 文件(XslDemo.xml)。两者都使用下面的筛选运算子,使得浏览器只显示BINDING 子元素具有文字「trade paperback」的元素:
[BINDING='trade paperback']
    而且这些范例都使用下面的order-by 属性设定,以作者的姓来递增排序BOOK 元素,如作者的姓相同时,再以作者的名字来递增排序:
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME"
    下图为则为两个范例相同输出结果的第一部份:

    列表10-6 中的样式表,使用for-each 元素来显示多个BOOK 元素。在下面的样式表中,筛选运算子和order-by 属性皆被加入for-each 元素中。
<xsl:for-each
select="INVENTORY/BOOK [BINDING='trade paperback']"
order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME">
<!--display current BOOK element-->
</xsl:for-each>
    列表10-7 中的样式表,使用apply-templates 元素及对应BOOK 元素的个别样板,来显示多个BOOK 元素。在样式表中,筛选运算子被加入对应到BOOK 元素的样板中:
<xsl:template match="BOOK [BINDING='trade paperback']">
    将筛选运算子加入apply-templates 元素中,也会得到相同的效果:
    order-by 属性以下面的格式被加入apply-templates 元素中:
<xsl:apply-templates select="INVENTORY/BOOK" order-by="+AUTHOR/LASTNAME;+AUTHOR/FIRSTNAME"/>
    order-by 属性必须被加入到apply-templates 元素中,因为template 元素无法辨识order-by 属性。 (你只可以在一个元素中使用属性order-by,使得浏览器在多重元素中搜寻符合的数据,这些元素就是for-each 和apply-templates)

  
网上收集

 

教程录入:dping    责任编辑:dping 
  • 上一篇教程:

  • 下一篇教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关教程
    筛选机结构
    在Excell中如何筛选显示红色
    为什么我的IE7每次打开都要弹
    2003中配置PPTP VPN客户端筛
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    极品网
    | 设为首页 | 加入收藏 | 友情链接 | 版权声明 |
    极品网

    Copyright 2006 Jpinw.com 极品网

    备案号:申请中

    极品网