使用xpatn提取元素和属性

来源:互联网 发布:巨潮财经数据库 编辑:程序博客网 时间:2024/05/01 22:11

使用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 seahappy


 

使用xpath的关键是会使用表达要提取的元素的表达式,使用时可参见dom4j的文档,特别详细,使用方便。