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

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

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

清单 4. 用固定的 XPath 表达式查询 XML 文档的完整程序

import java.io.IOException; import org.w3c.dom.*; import org.xml.sax.SAXException; import javax.xml.parsers.*; import javax.xml.xpath.*; public class XPathExample {   public static void main(String[] args)    throws ParserConfigurationException, SAXException,         IOException, XPathExpressionException {   DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();   domFactory.setNamespaceAware(true); // never forget this!   DocumentBuilder builder = domFactory.newDocumentBuilder();   Document doc = builder.parse("books.xml");   XPathFactory factory = XPathFactory.newInstance();   XPath xpath = factory.newXPath();   XPathExpression expr      = xpath.compile("//book/title/text()");   Object result = expr.evaluate(doc, XPathConstants.NODESET);   NodeList nodes = (NodeList) result;   for (int i = 0; i < nodes.getLength(); i++) {         System.out.println(nodes.item(i).getNodeValue());   }   } } XPath 数据模型
每当混合使用诸如 XPath 和 Java 这样两种不同的语言时,必定会有某些将两者粘合在一起的明显接缝。并非一切都很合拍。XPath 和 Java 语言没有同样的类型系统。XPath 1.0 只有四种基本数据类型:

◆ node-set
◆ number
◆ boolean
◆ string
当然,Java 语言有更多的数据类型,包括用户定义的对象类型。
多数 XPath 表达式,特别是位置路径,都返回节点集。但是还有其他可能。比如,XPath 表达式 count(//book) 返回文档中的图书数量。XPath 表达式 count(//book[@author="Neal Stephenson"]) > 10 返回一个布尔值:如果文档中 Neal Stephenson 的著作超过 10 本则返回 true,否则返回 false。
evaluate() 方法被声明为返回 Object。实际返回什么依赖于 XPath 表达式的结果以及要求的类型。一般来说,XPath 的
◆ number 映射为 java.lang.Double
◆ string 映射为 java.lang.String
◆ boolean 映射为 java.lang.Boolean
◆ node-set 映射为 org.w3c.dom.NodeList
XPath 2
前面一直假设您使用的是 XPath 1.0。XPath 2 大大扩展和修改了类型系统。Java XPath API 支持 XPath 2 所需的主要修改是为返回 XPath 2 新数据类型增加常量。
在 Java 中计算 XPath 表达式时,第二个参数指定需要的返回类型。有五种可能,都在 javax.xml.xpath.XPathConstants 类中命名了常量:

XPathConstants.NODESETXPathConstants.BOOLEANXPathConstants.NUMBERXPathConstants.STRINGXPathConstants.NODE最后一个 XPathConstants.NODE 实际上没有匹配的 XPath 类型。只有知道 XPath 表达式只返回一个节点或者只需要一个节点时才使用它。如果 XPath 表达式返回了多个节点并且指定了 XPathConstants.NODE,则 evaluate() 按照文档顺序返回第一个节点。如果 XPath 表达式选择了一个空集并指定了 XPathConstants.NODE,则 evaluate() 返回 null。
如果不能完成要求的转换,evaluate() 将抛出 XPathException。
页: [1]
查看完整版本: Java认证辅导之关于Java语言的XPathAPI(4)