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來解析:
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();
}
}
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()是讀取節點的的內容。
selectNodes(Object context, XPath sortXPath)第二個參數用來設置排序的屬性名
如:List list = root.selectNodes("book/title","@id");
這樣則會根據title節點的id屬性排序
posted on 2009-05-18 23:45
lvq810 閱讀(532)
評論(0) 編輯 收藏 所屬分類:
Open Framekwork