会计考友 发表于 2012-8-4 12:44:44

Java认证辅导之关于Java语言的XPathAPI

Java认证辅导之关于Java语言的XPathAPI
从 Java 程序中查询 XML
Elliotte Harold (elharo@metalab.unc.edu), 副教授, Polytechnic University
简介: XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多。如果需要从 XML 文档中提取信息,最快捷、最简单的办法就是在 Java™ 程序中嵌入 XPath 表达式。Java 5 推出了 javax.xml.xpath 包,这是一个用于 XPath 文档查询的独立于 XML 对象模型的库。
如果要告诉别人买一加仑牛奶,您会怎么说?“请去买一加仑牛奶回来” 还是 “从前门出去,向左转,走三个街区向右转,再走半个街区向右转进入商店。走向四号通道,沿通道走五米向左,拿一瓶一加仑装的牛奶然后到收银台付款。再沿原路回家。” 简直太可笑了。只要在 “请去买一加仑牛奶回来” 的基础上稍加指示,多数成人都能自己买回牛奶来。
查询语言和计算机搜索与此类似。直接说 “找一个 Cryptonomicon 的副本” 要比编写搜索某个数据库的详细逻辑容易得多。由于搜索操作的逻辑非常相似,可以发明一种通用语言让您使用 “找到 Neal Stephenson 的所有著作” 这样的命令,然后编写对特定数据存储执行此类查询的引擎。
XPath
在众多查询语言之中,结构化查询语言(SQL)是一种针对查询特定类型的关系库而设计和优化的语言。其他不那么常见的查询语言还有对象查询语言(OQL)和 XQuery。但本文的主题是 XPath,一种为查询 XML 文档而设计的查询语言。比如,下面这个简单的 XPath 查询可以在文档中找到作者为 Neal Stephenson 的所有图书的标题:

//book/title 作为对照,查询同样信息的纯 DOM 搜索代码如 清单 1 所示:
清单 1. 找到 Neal Stephenson 所有著作 title 元素的 DOM 代码

ArrayList 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 表达式通用或者健壮。您愿意编写、调试和维护哪一个?我想答案很明显。
页: [1]
查看完整版本: Java认证辅导之关于Java语言的XPathAPI