books.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!--This is a test for dom4j, jakoes, 2007.7.19-->
    <book show="yes" url="lucene.net">
        <title id="456">Lucene Studing</title>
    </book>
    <book show="yes" url="dom4j.com">
        <title id="123">Dom4j Tutorials</title>
    </book>
    <book show="no" url="spring.org">
        <title id="789">Spring in Action</title>
    </book>
    <owner>O'Reilly</owner>
</books>

下面我們使用dom4j的xPath來解析:

segment of ParseXML.java:

    public void parseBooks(){
       
        SAXReader reader = new SAXReader();
        try {
            Document doc = reader.read("books.xml");
            Node root = doc.selectSingleNode("/books");
            List list = root.selectNodes("book[@url='dom4j.com']");
           
            for(Object o:list){
               
                Element e = (Element) o;
                String show=e.attributeValue("show");
                System.out.println("show = " + show);
            }
          
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  Document doc = reader.read("books.xml");的意思是加載XML文檔,此是可以用doc.asXML()來查看,它將打印整個(gè)xml文檔。

  Node root = doc.selectSingleNode("/books");是讀取剛才加載的xml文檔內(nèi)的books節(jié)點(diǎn)下的所有內(nèi)容,對于本例也是整個(gè)xml文檔。
  當(dāng)然我們也可以加載/books下的某一個(gè)節(jié)點(diǎn),如:book節(jié)點(diǎn)
Node
root = doc.selectSingleNode("/books/book");
或:
Node root = doc.selectSingleNode("/books/*");
注意:如果有多個(gè)book節(jié)點(diǎn),它只會讀取第一個(gè)
root.asXML()將打印:
<book show="yes" url="lucene.net">
        <title id="456">Lucene Studing</title>
</book>

  既然加載了這么多,那我怎么精確的得到我想要的節(jié)點(diǎn)呢,別急,看下面:
List list = root.selectNodes("book[@url='dom4j.com']");
它的意思就是讀取books節(jié)點(diǎn)下的
book節(jié)點(diǎn),且book的節(jié)點(diǎn)的url屬性為dom4j.com
為什么使用list來接收呢,如果有兩個(gè)book節(jié)點(diǎn),且它們的url屬性都為dom4j.com,此時(shí)就封閉到list里了。

  如果想讀取books下的所有book節(jié)點(diǎn),可以這樣:
List list = root.selectNodes("book");

  如果想讀取books節(jié)點(diǎn)下的book節(jié)點(diǎn)下的title節(jié)點(diǎn),可以這樣:
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");

  注意:
selectNodes()參數(shù)的格式:
  節(jié)點(diǎn)名[@屬性名='屬性值'],如:
book[@url='dom4j.com']
  如果有多個(gè)節(jié)點(diǎn),用“/”分開,如:
book[@url='dom4j.com']/title[@id='123']

  最近就是讀取封閉在List里的內(nèi)容了,可以用Node來讀取,也可以用Element來轉(zhuǎn)換。
attributeValue("屬性")是讀取該節(jié)點(diǎn)的屬性值
getText()是讀取節(jié)點(diǎn)的的內(nèi)容。