|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
上个月,Java手艺讲师SamPullara向我演示了他最新的撑持Java的电话Nokia6630。这个手机利用了周全的手艺——嵌进式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
Tidytidy=newTidy();
tidy.setQuiet(true);
tidy.setShowWarnings(false);
DocumenttidyDOM=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还包括一些言语语句(languagestatement),比方“for”和“let”,它们能够与XML元素混合利用。
清单2显现了一个示例XML文档bib.xml,它暗示一个书目。然后我们将先容一些疾速的XQuery表达式,让您对XQuery可以做甚么构成一种熟悉,最后我们将再转到屏幕汇集的示例上。要周全先容XQuery的语法和利用情形大概要用几百页的篇幅,有关更具体的参考质料和示例,请参阅参考材料大节。
清单2.示例XML书目
<bib>
<bookyear="1994">
<title>TCP/IPIllustrated</title>
<author><last>Stevens</last><first>W.</first></author>
<publisher>Addison-Wesley</publisher>
<price>65.95</price>
</book>
... morebooks...
</bib>
清单3显现了一个XQuery表达式,它选择Addison-Wesley在1991年以后出书的一切书本,提取它们的题目,并把题目格局化成后面有项目标记的(<ul>)列表。年夜括号暗示从“暗示形式”(数据间接传送到输入,例如<ul>和<li>标签)到“代码形式”的切换;然后在return子句以后当即举行从“代码形式”到“暗示形式”的隐式切换。
清单3.依据查询参数选择图书题目的XQuery表达式
<ul>
{
for$bindoc("bib.xml")/bib/book
where$b/publisher="Addison-Wesley"and$b/@year>1991
return
<li>{data($b/title)}</li>
}
</ul>
<p>
主要缺点就是:速度比较慢,没有C和C++快 |
|