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