Dom4j 中集成了对 XPath 的支持。在选择节点时,可以直接使用 XPath 表达式。 这种方式更加方便,简洁,官方文档中推荐使用该种方式。
在使用XPath表达式之前你需要引入jaxen-1.1-beta-6.jar文件,该jar是一个XPath解析引擎。你可以在你下载的dom4j的lib目录下面找到该jar包。我的dom4j版本是dom4j-1.6.1。
我们要解析的XML文件如下:
<?xml version="1.0" encoding="GB2312"?> <books> <!-- java圣经 --> <book isbn="9787111213826"> <name>《Java编程思想(第4版)》</name> <desc> <![CDATA[Java 《Java编程思想(第4版)》书共22章,包括操作符、控制执行流程、访问权限控制]]> </desc> </book> <!-- Core Java Volume I-Fundamentals(Ninth Edition) 分为上下两卷 --> <book isbn="9787111445142"> <name>Java核心技术</name> <desc> <![CDATA[Java领域最有影响力和价值的著作之一,与《Java编程思想》齐名,10余年全球畅销不衰,广受好评;]]> </desc> </book> </books>
具体的java源码如下:
package com.bug315.parse; import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用XPath的方式解析 * * 注意: * 使用XPath方式解析XML文档,你需要引入jaxen-1.1-beta-6.jar,这是一个XPath引擎 * * @author administrator * @date 2015年12月17日21:21:53 */ public class ParseForXPathTest01 { public static void main(String[] args) throws Exception { // 创建Document对象 SAXReader saxReader = new SAXReader(); saxReader.setEncoding("UTF-8"); Document document = saxReader.read(new File("document/books.xml")); // 使用XPath获取所有的book元素 List list = document.selectNodes("//books//book"); for (Object obj : list) { Element element = (Element)obj; System.out.println("元素名称:" + element.getName() ); System.out.println("所有属性:"); List attrList = element.attributes(); for ( Object attr : attrList){ Attribute attrObj = (Attribute)attr; System.out.println(attrObj.getName() + " = " + attrObj.getText() ); } System.out.println(); } // 使用XPath获取所有book元素的isbn属性 List attributeList = document.selectNodes("//books//book//@isbn"); for ( Object obj : attributeList ) { Attribute attr = (Attribute)obj; System.out.println( attr.getName() + "=" + attr.getText() ); } } }
输出结果:
元素名称:book
所有属性:
isbn = 9787111213826
元素名称:book
所有属性:
isbn = 9787111445142
isbn=9787111213826
isbn=9787111445142