a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 290|回复: 0

[专业语言] Java认证辅导之关于Java语言的XPathAPI

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java认证辅导之关于Java语言的XPathAPI
7 c% ]: }# c) v9 `* M; x从 Java 程序中查询 XML
; @- Q7 Z5 @0 L2 nElliotte Harold (elharo@metalab.unc.edu), 副教授, Polytechnic University
& J; Z1 I, h) H8 ?简介: XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多。如果需要从 XML 文档中提取信息,最快捷、最简单的办法就是在 Java™ 程序中嵌入 XPath 表达式。Java 5 推出了 javax.xml.xpath 包,这是一个用于 XPath 文档查询的独立于 XML 对象模型的库。' |  p2 A/ f6 C9 h( n  K! O; r
如果要告诉别人买一加仑牛奶,您会怎么说?“请去买一加仑牛奶回来” 还是 “从前门出去,向左转,走三个街区向右转,再走半个街区向右转进入商店。走向四号通道,沿通道走五米向左,拿一瓶一加仑装的牛奶然后到收银台付款。再沿原路回家。” 简直太可笑了。只要在 “请去买一加仑牛奶回来” 的基础上稍加指示,多数成人都能自己买回牛奶来。
7 {- ~: t! ?$ d  L& ^. a查询语言和计算机搜索与此类似。直接说 “找一个 Cryptonomicon 的副本” 要比编写搜索某个数据库的详细逻辑容易得多。由于搜索操作的逻辑非常相似,可以发明一种通用语言让您使用 “找到 Neal Stephenson 的所有著作” 这样的命令,然后编写对特定数据存储执行此类查询的引擎。
" l" r! j; J! c' S" ?3 A! JXPath1 A% S) Z3 E# K, {9 _* W! h
在众多查询语言之中,结构化查询语言(SQL)是一种针对查询特定类型的关系库而设计和优化的语言。其他不那么常见的查询语言还有对象查询语言(OQL)和 XQuery。但本文的主题是 XPath,一种为查询 XML 文档而设计的查询语言。比如,下面这个简单的 XPath 查询可以在文档中找到作者为 Neal Stephenson 的所有图书的标题:# I7 j" Q& Z! s
% b0 G8 J" n5 P1 J  I4 I  y
//book[author="Neal Stephenson"]/title 作为对照,查询同样信息的纯 DOM 搜索代码如 清单 1 所示:
5 W+ v6 h, P. J4 _7 r清单 1. 找到 Neal Stephenson 所有著作 title 元素的 DOM 代码
/ P! w: [4 e( L" Y9 e$ @2 S7 {
" b6 l+ F8 H1 {# f9 ]* f; fArrayList result = new ArrayList(); NodeList books = doc.getElementsByTagName("book"); for (int i = 0; i < books.getLength(); i++) {     Element book = (Element) books.item(i);     NodeList authors = book.getElementsByTagName("author");     boolean stephenson = false;     for (int j = 0; j < authors.getLength(); j++) {         Element author = (Element) authors.item(j);         NodeList children = author.getChildNodes();         StringBuffer sb = new StringBuffer();         for (int k = 0; k < children.getLength(); k++) {             Node child = children.item(k);             // really should to do this recursively             if (child.getNodeType() == Node.TEXT_NODE) {                 sb.append(child.getNodeValue());             }         }         if (sb.toString().equals("Neal Stephenson")) {             stephenson = true;             break;         }     }     if (stephenson) {         NodeList titles = book.getElementsByTagName("title");         for (int j = 0; j < titles.getLength(); j++) {             result.add(titles.item(j));         }     } } 不论您是否相信,清单 1 中的 DOM 显然不如简单的 XPath 表达式通用或者健壮。您愿意编写、调试和维护哪一个?我想答案很明显。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-23 14:20 , Processed in 0.177982 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表