使用dom4j工具包提取元素时,使用element方法一层一层的往下提取元素时,短层次的使用起来比较方便,但遇到多层次嵌套的,这种方法便遇到问题,不过还有一种方式来提取元素,使用xpath方式.
xml文件如下:
<?xml version="1.0" encoding="gb2312"?>
<书架>
<书>
<书名 name="the daught of sea">海的女儿</书名>
<作者>Hello</作者>
<售价>50.0元</售价>
<售价>39.0元</售价>
</书>
<书>
<书名 name="happy">卖火柴的小女孩</书名>
<作者>安徒生</作者>
</书>
</书架>
使用xpath方式提取元素的Java代码如下:
package com.java.dom;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XPathTest {
/**
* @param args
* @throws DocumentException
*/
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
Document doc = reader.read("src/books.xml");
//使用xpath提取单个元素
String price = doc.selectSingleNode("//售价").getText();//取出第一个售价
System.out.println(price);
//使用xpath提取多个相同元素
List list = doc.selectNodes("//书名");
for(Iterator it = list.iterator(); it.hasNext();) {
Element name = (Element) it.next();
String name1 = name.getText();
System.out.println(name1);
}
//使用xpath提取多个属性
List list1 = doc.selectNodes("//书名");
for(Iterator iter = list.iterator(); iter.hasNext();) {
Element name = (Element) iter.next();
String name1 = name.valueOf("@name");
System.out.println(name1);
}
}
}
运行结果为:
50.0元
海的女儿
卖火柴的小女孩
the daught of sea
happy
使用xpath的关键是会使用表达要提取的元素的表达式,使用时可参见dom4j的文档,特别详细,使用方便。