JDOM處理XML快速上手--結(jié)合XPATH
XPATH基礎(chǔ)
?????? XPATH遵循文檔對(duì)象模型(DOM)的路徑格式,基本語法由表達(dá)式構(gòu)成。在計(jì)算表達(dá)式的值之后產(chǎn)生一個(gè)對(duì)象,這種對(duì)象有以下四種基本類型:節(jié)點(diǎn)集合、布爾型、數(shù)字型和字符
?????? XPATH遵循文檔對(duì)象模型(DOM)的路徑格式,基本語法由表達(dá)式構(gòu)成。在計(jì)算表達(dá)式的值之后產(chǎn)生一個(gè)對(duì)象,這種對(duì)象有以下四種基本類型:節(jié)點(diǎn)集合、布爾型、數(shù)字型和字符
串型。XPATH基本上和在文件系統(tǒng)中尋找文件類似,如果路徑是以"/"開頭的,就表明該路徑表示的是一個(gè)絕對(duì)路徑,這和在UNIX系統(tǒng)中關(guān)于文件路徑的定義是一致的。以"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文檔中使用位置路徑表達(dá)式來查找信息,這些表達(dá)式有很多種組成方式。一般我們用得最多的恐怕是 節(jié)點(diǎn)元素 查找。XPATH中用正斜杠(/)來分隔子結(jié)點(diǎn),返回所有與
模式相匹配的元素。下面以幾個(gè) 表達(dá)式 的例子來說明一下返回結(jié)果:
????? 表達(dá)式:/friends/friend
????? 返回:根元素friends下所有的 friend 元素(或節(jié)點(diǎn))。(當(dāng)然本例只有一個(gè)啦!)
????? 返回:根元素friends下所有的 friend 元素(或節(jié)點(diǎn))。(當(dāng)然本例只有一個(gè)啦!)
?
????? 表達(dá)式:/friends/*
????? 返回:根元素friends下所有的元素(或節(jié)點(diǎn))。(“*”相當(dāng)于通配符,表示“所有”的)
????? 返回:根元素friends下所有的元素(或節(jié)點(diǎn))。(“*”相當(dāng)于通配符,表示“所有”的)
?
????? 表達(dá)式://friend
???? ?返回:任意元素(或節(jié)點(diǎn))下的所有 friend 元素(或節(jié)點(diǎn))。(注意:不僅僅是1中 根元素friends下面的friend元素,如果存在的話)
???? ?返回:任意元素(或節(jié)點(diǎn))下的所有 friend 元素(或節(jié)點(diǎn))。(注意:不僅僅是1中 根元素friends下面的friend元素,如果存在的話)
?
????? 表達(dá)式:/friends/friend[@number='1']
???? ?返回:根元素下元素名稱為 friend,number屬性為'1'的全部元素(或節(jié)點(diǎn))。(對(duì)于元素或節(jié)點(diǎn)的附加元素,比如屬性,函數(shù)等都要用方括號(hào)"[]"擴(kuò)起來,屬性前面要加
???? ?返回:根元素下元素名稱為 friend,number屬性為'1'的全部元素(或節(jié)點(diǎn))。(對(duì)于元素或節(jié)點(diǎn)的附加元素,比如屬性,函數(shù)等都要用方括號(hào)"[]"擴(kuò)起來,屬性前面要加
上"@"號(hào))
?
????? 表達(dá)式:/friends/friend/phone[text()='87654321']
????? 返回:元素friends/friend下電話號(hào)碼為 87654321 的全部元素。(text()是XPATH的函數(shù),功能是取出當(dāng)前節(jié)點(diǎn)的文本內(nèi)容,即content。)
????? 返回:元素friends/friend下電話號(hào)碼為 87654321 的全部元素。(text()是XPATH的函數(shù),功能是取出當(dāng)前節(jié)點(diǎn)的文本內(nèi)容,即content。)
?
????? 表達(dá)式://name/parent::*
????? 返回:name元素的所有父元素(或節(jié)點(diǎn))。(parent::* 表示這個(gè)元素的所有的父節(jié)點(diǎn)的集合)
????? 返回:name元素的所有父元素(或節(jié)點(diǎn))。(parent::* 表示這個(gè)元素的所有的父節(jié)點(diǎn)的集合)
?
????? 上面的介紹對(duì)于我們一般的應(yīng)用基本上夠用了,如果你需要進(jìn)一步的深入,請(qǐng)查看W3C發(fā)布的關(guān)于XAPH的官方資料。
?
JDOM+XPATH應(yīng)用
?
???? ?現(xiàn)在我們開始使用XPATH結(jié)合JDOM來操作XML文件了。JDOM的關(guān)于XPATH的api只有一個(gè)類:Xpath.java,在org.jdom.xpath這個(gè)包中。這個(gè)類中的核心方法主要是兩個(gè)靜態(tài)方法
selectNodes()和selectSingleNode()。前者根據(jù)一個(gè)xpath語句返回一組節(jié)點(diǎn):List;后者根據(jù)一個(gè)xpath語句返回符合條件的第一個(gè)節(jié)點(diǎn):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之前,請(qǐng)先確定你的classpath路徑里面有如下幾個(gè)JAR包,如果沒有,請(qǐng)從JDOM的發(fā)行包中l(wèi)ib目錄下copy:
???????? saxpaht.jar
???????? jaxen-core.jar
???????? jaxen-jdom.jar
???????? saxpaht.jar
???????? jaxen-core.jar
???????? jaxen-jdom.jar
樣列JAVA代碼:





















































輸出結(jié)果:
[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) 評(píng)論(0) 編輯 收藏 所屬分類: XML