使用DOM与XPATH解析一个Document对象的一般过程:
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true); // never forgetthis!
DocumentBuilder builder =factory.newDocumentBuilder();
Document doc =builder.parse("books.xml");
到目前为止,这仅仅是标准的 JAXP 和 DOM,没有什么新鲜的。接下来创建 XPathFactory:
XPathFactory factory =XPathFactory.newInstance();
然后使用这个工厂创建 XPath 对象:
XPath xpath = factory.newXPath();
XPath 对象编译 XPath 表达式:
PathExpression expr =
xpath.compile("//book[author='NealStephenson']/title/text()");
直接求值
如果 XPath 表达式只使用一次,可以跳过编译步骤直接对XPath 对象静态调用 evaluate() 方法。但是,如果同一个表达式要重复使用多次,编译可能更快一些。
最后,计算 XPath 表达式得到结果。表达式是针对特定的上下文节点计算的,在这个例子中是整个文档。还必须指定返回类型。这里要求返回一个节点集:
Object result = expr.evaluate(doc,XPathConstants.NODESET);
可以将结果强制转化成 DOM NodeList,然后遍历列表得到所有的标题:
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength();i++) {
System.out.println(nodes.item(i);
}