快速业务通道

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

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

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

时间:2010-12-20 IBM Brian Goetz

上个月,Java 技术讲师 Sam Pullara 向我演示了他最新的支持 Java 的电 话 Nokia 6630。这个手机使用了全面的技术 —— 嵌入式 JVM、GPRS 和蓝牙, 但是它也遭遇了所有智能手机都苦恼的问题 —— 有限的屏幕实际使用区。有些 Web 站点支持基于手机的浏览器,而且嵌入式浏览器也试图在小小的屏幕上有效 地渲染页面,但是,在电话屏幕上查看典型的 Web 页面,就像要把一头大象强 行塞进车后座一样(其中的每个参与者都会感到失望,包括您、车和大象)。 Sam 构建了一个简单的、优雅的解决方案,从他喜欢的 Web 站点上对数据进行 屏幕搜集,然后把数据重新格式化,在小屏幕上显示。

新方法

从 HTML 文档提取数据的方法有许多种,但是我真的很喜欢 Sam 采用的方法 :既把 XQuery 当作屏幕搜集工具(从页面中提取相当的数据),又把它当作样 式表工具(重新格式化数据,以便数据适应页面,不需要进行页面滚动)。只要 少量基础设施和一些非常简单的 XQuery 表达式,就可以从大量数据源提取出相 关数据 —— 例如交通、天气和财务报价等,并在电话上完好地显示数据。

我过去经常处于这种情况:对 HTML 页面进行屏幕搜集对某些特定问题来说 似乎是可行的方案,但是几乎没有用于屏幕搜集的 Java 工具包。有许多 HTML 解析工具,但它们通常缺少足够的抽象能力(把屏幕搜集代码弄得乱七八糟), 大量不符合 HTML 规范的应用限制了它们,它们也无法处理那些结构可能随时间 发生变化的、动态生成的页面。

为了弥补质量低下的 HTML 和丰富的 XML 处理工具之间的空白,首先要把 HTML 转换成 XML。许多工具有助于完成这项工作;JTidy 工具包做得很好,可 以使这项工作变得轻松一些。JTidy 的设计目标是读入典型质量(即很糟)的 HTML 并输出更整洁的结果(有选项可供选择),它还提供了一个 DOM 接口,用 来遍历能够发送给 XML 解析器的 HTML 文档。清单 1 中的代码将从 InputStream 中读取 HTML 文档,并生成文档的 DOM 表示:

清单 1. 用 JTidy 把 HTML 转换成 XML 兼容的 DOM

Tidy tidy = new Tidy(); tidy.setQuiet(true); tidy.setShowWarnings(false); Document tidyDOM = tidy.parseDOM(inputStream, null);

用这个简单的转换,就差不多能把每个 Web 页面都当作 XML 文档进行处理 ,还能用自己喜欢的任何 XML 工具(比如 SAX、XSL、XPath,等等)提取数据 。虽然 XSL 可能是很明智的选择(因为其设计目标就是为了从 XML 文档中提取 信息并转换这些信息,以便显示它们),但是如果不了解 XSL 的话,它的学习 曲线就很难掌握,即使是最简单的 XSL 转换也复杂得让人心烦。XPath 是处理 信息提取的一个好选择 —— XSL 和 XQuery 都用它进行内容选择,可以很容易 地使用 XPath 把需要的数据提取出来,然后对 HTML 进行格式化,但是 XQuery 会让这项工具更加容易。

XQuery:简介

XQuery 的设计目标是从可能非常大的 XML 数据集中提取数据。输入的数据 集不必是 XML 文档,虽然它可能是 XML 文档,但是也可能是已经编入索引并保 存在 XML 数据库中的文档集合,甚至是一组关系数据库中的表。像 SQL 一样, XQuery 包含从多个数据集中提取数据、汇总数据、聚合数据和连接数据的函数 。

就像 JSP、ASP 或 Velocity 这样的表示性模板语言一样,XQuery 把两个域 (表示域和计算域)中的元素组合成一种组合语法。结果,所有 XML 文档都自 动成为有效的 XQuery 表达式,并对自身进行评估。XQuery 还包含一些语言语 句(language statement),例如“for”和“let”,它们可以与 XML 元素混 合使用。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号