Java 语言的 Path API分析和总结.docxVIP

  • 0
  • 0
  • 约1.27万字
  • 约 11页
  • 2023-05-12 发布于上海
  • 举报
XPath 表达式比繁琐的文档对象模型(DOM)导航代码要容易编写得多。如果需要从 XML 文档中提取 信息,最快捷、最简单的办法就是在 Java? 程序中嵌入 XPath 表达式。Java 5 推出了 javax.xml.xpath 包,这是一个用于 XPath 文档查询的独立于 XML 对象模型的库。 如果要告诉别人买一加仑牛奶,您会怎么说?“请去买一加仑牛奶回来” 还是 “从前门出去,向左转,走三个街区向右转,再走半个街区向右转进入商店。走向四号通道,沿通道走五米向左,拿一瓶一加仑装的牛奶然后到收银台付款。再沿原路回家。” 简直太可笑了。只要在 “请去买一加仑牛奶回来” 的基础上稍加指示,多数成人都能自己买回牛奶来。 查询语言和计算机搜索与此类似。直接说 “找一个 Cryptonomicon 的副本” 要比编写搜索某个数据库的详细逻辑容易得多。由于搜索操作的逻辑非常相似,可以发明一种通用语言让您使用 “找到 Neal Stephenson 的所有著作” 这样的命令,然后编写对特定数据存储执行此类查询的引擎。 XPath //book[author=Neal Stephenson]/title在众多查询语言之中,结构化查询语言(SQL)是一种针对查询特定类型的关系库而设计和优化的语言。其他不那么常见的查询语言还有对象查询语言(OQL)和 XQuery。但本文的主题是 XPath,一种为查询 XML 文档而设计的查询语言。比如,下面这个简单的 XPath 查询可以在文档中找到作者为 Neal Stephenson 的所有图书的标题: //book[author=Neal Stephenson]/title 作为对照,查询同样信息的纯 DOM 搜索代码如 清单 1 所示: 清单 1. 找到 Neal Stephenson 所有著作 title 元素的 DOM 代码 ArrayList result = new ArrayList(); 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) { if (stephenson) { NodeList titles = book.getElementsByTagName(title); for (int j = 0; j titles.getLength(); j++) { result.add(titles.item(j)); } } } 不论您是否相信,清单 1 中的 DOM 显然不如简单的 XPath 表达式通用或者健壮。您愿意编写、调试和维护哪一个?我想答案很明显。 但是虽然有很强的表达能力,XPath 并不是 Java 语言,事实上 XPath 不是一种完整的编程语言。有很多东西用 XPath 表达不出来,甚至有些查询也无法表达。比方说,XPath 不能查找国际标准图书编码 (ISBN)检验码不匹配的所有图书,或者找出境外帐户数据库显示欠帐的所有作者。幸运的是,可以把 XPath 结合到 Java 程序中,这样就能发挥两者的优势了:Java 做 Java 所擅长的,XPath 做 XPath 所擅长的。 直到最近,Ja

文档评论(0)

1亿VIP精品文档

相关文档