[轉]dom4j實例
dom4j實例
http://haiyupeter.javaeye.com/blog/306572
關鍵字: dom4j實例 國外的dom4j已經很流行了,國內的相關資料相對較少,但普及風暴也即將到來。我們公司(老外開的)解析XML就是用的dom4j。
今天公司沒事做,自己也寫一個小例子貼上來,嘻~~
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()來查看,它將打印整個xml文檔。
Node root = doc.selectSingleNode("/books");是讀取剛才加載的xml文檔內的books節點下的所有內容,對于本例也是整個xml文檔。
當然我們也可以加載/books下的某一個節點,如:book節點
Node root = doc.selectSingleNode("/books/book");
或:Node root = doc.selectSingleNode("/books/*");
注意:如果有多個book節點,它只會讀取第一個
root.asXML()將打印:
<book show="yes" url="lucene.net">
<title id="456">Lucene Studing</title>
</book>
既然加載了這么多,那我怎么精確的得到我想要的節點呢,別急,看下面:
List list = root.selectNodes("book[@url='dom4j.com']");
它的意思就是讀取books節點下的book節點,且book的節點的url屬性為dom4j.com
為什么使用list來接收呢,如果有兩個book節點,且它們的url屬性都為dom4j.com,此時就封閉到list里了。
如果想讀取books下的所有book節點,可以這樣:
List list = root.selectNodes("book");
如果想讀取books節點下的book節點下的title節點,可以這樣:
List list2 = root.selectNodes("book[@url='dom4j.com']/title[@id='123']");
注意:selectNodes()參數的格式:
節點名[@屬性名='屬性值'],如:book[@url='dom4j.com']
如果有多個節點,用“/”分開,如:book[@url='dom4j.com']/title[@id='123']
最近就是讀取封閉在List里的內容了,可以用Node來讀取,也可以用Element來轉換。
attributeValue("屬性")是讀取該節點的屬性值
getText()是讀取節點的的內容。
---------------------------------------------------------------------------------------
——使你疲勞的不是遠方的高山,而是你鞋里一粒沙子!