快速业务通道

Java理论与实践:用XQuery进行屏幕搜集 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

清单 2 显示了一个示例 XML 文档 bib.xml,它表示一个书目。然后我们将 介绍一些快速的 XQuery 表达式,让您对 XQuery 能够做什么形成一种认识,最 后我们将再转到屏幕搜集的示例上。要全面介绍 XQuery 的语法和使用情况可能 要用几百页的篇幅,有关更详细的参考材料和示例,请参阅 参考资料 小节。

清单 2. 示例 XML 书目

<bib>    <book year="1994">      <title>TCP/IP Illustrated</title>      <author><last>Stevens</last><first>W.</firs t></author>      <publisher>Addison-Wesley</publisher>      <price> 65.95</price>    </book>    . . . more books . . . </bib>

清单 3 显示了一个 XQuery 表达式,它选择 Addison-Wesley 在 1991 年以 后出版的所有书籍,提取它们的标题,并把标题格式化成前面有项目符号的 (<ul>)列表。大括号表示从“表示模式”(数据直接传递到输出 ,例 如 <ul> 和 <li> 标签)到“代码模式”的切换;然后在 return 子句之后立即进行从“代码模式”到“表示模式”的隐式切换。

清单 3. 根据查询参数选择图书标题的 XQuery 表达式

<ul> {   for $b in doc("bib.xml")/bib/book   where $b/publisher = "Addison-Wesley" and $b/@year > 1991   return    <li>{ data($b/title) }</li> } </ul>

Java理论与实践:用XQuery进行屏幕搜集(2)

时间:2010-12-20 IBM Brian Goetz

查询语法引入了“for”,通常称之为“Flower 表达式”(来自 FLWOR,是 for-let-where-order-return 的缩写),该语法从文档中选择一系列 XML 节点 ,在该例中,用 XPath 选取了来自 bib.xml 文档的 <book> 节点集,然 后进一步过滤出与指定查询参数(出版商是 Addison-Wesley,出版日期是 1991 年之后)匹配的节点。对于选出的每个节点,将在 return 子句中计算表达式, 在这里是标记(<li> 标签)与代码(提取出每个 <book> 节点的 <title> 元素的内容)的混合。

这个简单的 XQuery 示例描述了 XQuery 的几个方面 —— 某一文档中表示 与代码的混合、XPath 的运用、子条件的运用($b 引用)、非凡的查询表达式 、XQuery 函数(data()),还有一个事实:输出文档的结构不必与输入文档的 结构匹配。就在这个相当紧凑的、读起来不是很难的查询中,孕育着强大的处理 能力。

清单 4 显示了一个更简单的 XQuery 表达式,它把书目中不同出版商的数量 ,在一个 <count> 元素中输出。像前一个示例一样,它用 XPath 表达式 选择一组节点,然后用 XQuery 函数选择惟一值,并计算节点的数量。它通过运 算获得一个数字 —— bib.xml,即文档中不同出版商的数量。

清单 4. 计算不同出版商数量的 XQuery 表达式

<count> {   let $d := distinct-values(doc("bib.xml")/book/publisher)   return count($d) } </count>

这些示例只是 XQuery 能够执行的各种查询类型的很少一部分,提供这些例 子仅仅是为了让您对使用 XQuery 能够做的事情有些感觉,以及提示您如何才能 用 XQuery 把 XML 文档转换成自己选择的格式。虽然 XQuery 的大部分功能主 要用于查询大型文档或者其他数据源,但是也可以使用 XQuery 非常简单的子集 来对 HTML 文档进行屏幕搜集,为各种应用程序提取出需要的数据,例如在屏幕 大小有限的设备(例如蜂窝电话)上显示有关的数据,或者创建

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号