JDOM處理XML快速上手--結合XPATH
XPATH基礎
?????? XPATH遵循文檔對象模型(DOM)的路徑格式,基本語法由表達式構成。在計算表達式的值之后產生一個對象,這種對象有以下四種基本類型:節點集合、布爾型、數字型和字符
?????? XPATH遵循文檔對象模型(DOM)的路徑格式,基本語法由表達式構成。在計算表達式的值之后產生一個對象,這種對象有以下四種基本類型:節點集合、布爾型、數字型和字符
串型。XPATH基本上和在文件系統中尋找文件類似,如果路徑是以"/"開頭的,就表明該路徑表示的是一個絕對路徑,這和在UNIX系統中關于文件路徑的定義是一致的。以"http://"開頭
則表示在文檔中的任意位置查找。
?????? 以樣例XML文檔(friends.xml)為例來了解XPATH:
xml文件
??<?xml?version="1.0"?encoding="UTF-8"?>
???????<friends?comment="Friends?List">
???????????<friend?number="1">
???????????????<name>zoof</name>
???????????????<sex?value="male"?/>
???????????????<phone>87654321</phone>
????????????</friend>
????????????<friend?number="2">
????????????????<name>joe</name>
????????????????<sex?value="male"?/>
????????????????<phone>87654322</phone>
????????????</friend>
????????????<friend?number="3">
????????????????<name>joe</name>
????????????????<sex?value="female"?/>
????????????????<phone>87654323</phone>
????????????</friend>
????????</friends>
?????? 以樣例XML文檔(friends.xml)為例來了解XPATH:





















?????
在XML文檔中使用位置路徑表達式來查找信息,這些表達式有很多種組成方式。一般我們用得最多的恐怕是 節點元素 查找。XPATH中用正斜杠(/)來分隔子結點,返回所有與
模式相匹配的元素。下面以幾個 表達式 的例子來說明一下返回結果:
????? 表達式:/friends/friend
????? 返回:根元素friends下所有的 friend 元素(或節點)。(當然本例只有一個啦!)
????? 返回:根元素friends下所有的 friend 元素(或節點)。(當然本例只有一個啦!)
?
????? 表達式:/friends/*
????? 返回:根元素friends下所有的元素(或節點)。(“*”相當于通配符,表示“所有”的)
????? 返回:根元素friends下所有的元素(或節點)。(“*”相當于通配符,表示“所有”的)
?
????? 表達式://friend
???? ?返回:任意元素(或節點)下的所有 friend 元素(或節點)。(注意:不僅僅是1中 根元素friends下面的friend元素,如果存在的話)
???? ?返回:任意元素(或節點)下的所有 friend 元素(或節點)。(注意:不僅僅是1中 根元素friends下面的friend元素,如果存在的話)
?
????? 表達式:/friends/friend[@number='1']
???? ?返回:根元素下元素名稱為 friend,number屬性為'1'的全部元素(或節點)。(對于元素或節點的附加元素,比如屬性,函數等都要用方括號"[]"擴起來,屬性前面要加
???? ?返回:根元素下元素名稱為 friend,number屬性為'1'的全部元素(或節點)。(對于元素或節點的附加元素,比如屬性,函數等都要用方括號"[]"擴起來,屬性前面要加
上"@"號)
?
????? 表達式:/friends/friend/phone[text()='87654321']
????? 返回:元素friends/friend下電話號碼為 87654321 的全部元素。(text()是XPATH的函數,功能是取出當前節點的文本內容,即content。)
????? 返回:元素friends/friend下電話號碼為 87654321 的全部元素。(text()是XPATH的函數,功能是取出當前節點的文本內容,即content。)
?
????? 表達式://name/parent::*
????? 返回:name元素的所有父元素(或節點)。(parent::* 表示這個元素的所有的父節點的集合)
????? 返回:name元素的所有父元素(或節點)。(parent::* 表示這個元素的所有的父節點的集合)
?
????? 上面的介紹對于我們一般的應用基本上夠用了,如果你需要進一步的深入,請查看W3C發布的關于XAPH的官方資料。
?
JDOM+XPATH應用
?
???? ?現在我們開始使用XPATH結合JDOM來操作XML文件了。JDOM的關于XPATH的api只有一個類:Xpath.java,在org.jdom.xpath這個包中。這個類中的核心方法主要是兩個靜態方法
selectNodes()和selectSingleNode()。前者根據一個xpath語句返回一組節點:List;后者根據一個xpath語句返回符合條件的第一個節點:Object。
???????? public static List selectNodes(Object arg1,String arg2) throws org.jdom.JDOMException;
???????? public static Object selectSingleNode(Object arg1,String arg2) throws org.jdom.JDOMException;
?????
???????? public static List selectNodes(Object arg1,String arg2) throws org.jdom.JDOMException;
???????? public static Object selectSingleNode(Object arg1,String arg2) throws org.jdom.JDOMException;
?????
????? 在使用XPATH之前,請先確定你的classpath路徑里面有如下幾個JAR包,如果沒有,請從JDOM的發行包中lib目錄下copy:
???????? saxpaht.jar
???????? jaxen-core.jar
???????? jaxen-jdom.jar
???????? saxpaht.jar
???????? jaxen-core.jar
???????? jaxen-jdom.jar
樣列JAVA代碼:





















































輸出結果:
[info] Friends List:
No.1
?Name:[zoof]
?Sex:[male]
?Phone:[87654321]
No.1
?Name:[zoof]
?Sex:[male]
?Phone:[87654321]
No.2
?Name:[joe]
?Sex:[male]
?Phone:[87654322]
?Name:[joe]
?Sex:[male]
?Phone:[87654322]
No.3
?Name:[joe]
?Sex:[female]
?Phone:[87654323]
?Name:[joe]
?Sex:[female]
?Phone:[87654323]
[info] End of Friends List.
posted on 2007-03-17 10:46 沒有魚的水 閱讀(884) 評論(0) 編輯 收藏 所屬分類: XML