通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>XML专区>>正文 新版上线![旧版]
注:打开慢时请稍等

筛选和排序XML数据

http://www.iyit.net  日期:2006-5-24 12:04:08  来源:整理转载   点击:
参加讨论】    在接下来的两节中,你将学习利用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)

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:使用XSL样式表来显示XML文件
下一篇:存取XML的属性
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
XML和现代CGI应用程序 XML与其相关技术 XML文件的显示——CSS和XSL
给XML文件定义DTD 动态产生XML文档的几种方式 XML初级应用ABC
编写结构完整的XML文档 XML(可扩展标识语言)的产生 构造未来Web页面的工具语言-- XML
XML 入门介绍 XML入门精解之结构与语法 XML基础教程:掌握SAX
XML基础入门 建立MSXML 测试环境 XML 论坛
让Asp与XML交互 How to generate XML with SQL 2000 XML的一般信息
存取XML的属性 使用XSL样式表来显示XML文件 检查XML文件的有效性
浏览整个XML文件 存取XML实体与卷标 存取与显示XML文件的属性值
最新更新 热点排行 推荐新闻
WML Script标准函数库
WML Script脚本程序设计(二)
WML Script脚本程序设计(一)
WML Script语法基础
WML编程
CGI测试
CGI教程-ErrorDocument 指令
CGI教程-解码数据发送给CGI脚本
跟我学Perl
Perl教学 Perl5的包和模块
Perl教学 Perl的面向对象编程
Perl教学 Perl5中的引用(指针)
Perl教学 格式化输出
Perl教学 关联数组(哈希表)
Perl教学 子程序
WML Script标准函数库
WML Script脚本程序设计(二)
WML Script脚本程序设计(一)
WML Script语法基础
WML编程
优秀公益广告作品欣赏(8)
java数据类型转换
Windows XP专业版IIS连接数的更改
新开放QQ免费挂级网站
优秀公益广告作品欣赏(7)
免费在QQ上看在线电影电视听音乐
QQ珊瑚虫外挂4.0版本发布!
WEB服务器配置全攻略(三)
免费把QQ炫铃设为本机QQ的系统提示音
Office2007简体中文版浮出水面 美图抢
微软将在华推分期付款,充值卡PC 可低价
 AMD处理器AM2测试 风扇竟运行7分钟
exeplorer.exe错误的问题的总结、解决
ASP.NET 2.0 中的异步页功能应用
硬盘坏道修复及数据恢复宝典
免费登录搜索引擎入口大全
搜索引擎注册九大秘法
小心摄像头成为黑客偷窥你的眼睛
内存混插常见问题和解决方法
Office2007简体中文版浮出水面 美图抢
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息