將一個XML或HTML文檔轉(zhuǎn)換成了DOM樹結(jié)構(gòu)后,如何才能定位到特定的節(jié)點?XPath實現(xiàn)了這樣的功能,它通過DOM樹中節(jié)點的路徑和屬性來導(dǎo)航,通過XPath路徑表達(dá)式可以選擇DOM樹中的nodes(節(jié)點)或是node-set(節(jié)點集)。 XPath包含了數(shù)量超過100的內(nèi)置函數(shù)。這些函數(shù)針對字符串值,數(shù)字值,日期和時間比較,節(jié)操作,順序操作,布爾值,等 解析用的java包 Java 5 推出了 javax.xml.xpath 包,這是一個用于 XPath 文檔查詢的獨立于 XML 對象模型的庫。 Xalan-Java http://xml./xalan-j/ 常用函數(shù) xpath的常用函數(shù)主要包含節(jié)點集函數(shù),字符串函數(shù),布爾函數(shù),數(shù)字函數(shù),網(wǎng)上的資料較多,在此就不再累述,可參考以下資料: [a] XPath, XQuery, and XSLT Functions http://www./xpath/xpath_functions.asp [b] XPath Functions http://www./resin-3.0/xml/xpath-fun.xtp [c] XPath Functions(MSDN) http://msdn2.microsoft.com/en-us/library/ms256138.aspx 常用定位語句實例 1. //NODE[not(@class)] 所有節(jié)點名為node,且不包含class屬性的節(jié)點 2. //NODE[@class and @id] 所有節(jié)點名為node,且同時包含class屬性和id屬性的節(jié)點 3. //NODE[contains(text(),substring] 所有節(jié)點名為node,且其文本中包含substring的節(jié)點 //A[contains(text(),\"下一頁\")] 所有包含“下一頁”字符串的超鏈接節(jié)點 //A[contains(@title,"文章標(biāo)題")] 所有其title屬性中包含“文章標(biāo)題”字符串的超鏈接節(jié)點 4. //NODE[@id="myid"]/text() 節(jié)點名為node,且屬性id為myid的節(jié)點的所有直接text子節(jié)點 5. BOOK[author/degree] 所有包含author節(jié)點同時該author節(jié)點至少含有一個的degree孩子節(jié)點的book節(jié)點 6. AUTHOR[.="Matthew Bob"] 所有值為“Matthew Bob”的author節(jié)點 7. //*[count(BBB)=2] 所有包含兩個BBB孩子節(jié)點的節(jié)點 8. //*[count(*)=2] 所有包含兩個孩子節(jié)點的節(jié)點 9. //*[name()='BBB'] 所有名字為BBB的節(jié)點,等同于//BBB 10. //*[starts-with(name(),'B')] 所有名字開頭為字母B的節(jié)點 11. //*[contains(name(),'C')] 所有名字中包含字母C的節(jié)點 12. //*[string-length(name()) = 3] 名字長度為3個字母的節(jié)點 13. //CCC | //BBB 所有CCC節(jié)點或BBB節(jié)點 14. /child::AAA 等價于/AAA 15. //CCC/descendant::* 所有以CCC為其祖先的節(jié)點 16. //DDD/parent::* DDD節(jié)點的所有父節(jié)點 17. //BBB[position() mod 2 = 0] 偶數(shù)位置的BBB節(jié)點 18. AUTHOR[not(last-name = "Bob")] 所有不包含元素last-name的值為Bob的節(jié)點 19. P/text()[2] 當(dāng)前上下文節(jié)點中的P節(jié)點的第二個文本節(jié)點 20. ancestor::BOOK[1] 離當(dāng)前上下文節(jié)點最近的book祖先節(jié)點 21. //A[text()="next"] 錨文本內(nèi)容等于next的A節(jié)點
最后推薦一款在Firefox中用的XPath插件: XPath Checker https://addons.mozilla.org/en-US/firefox/addon/1095 這個插件可以方便查看網(wǎng)頁中任意元素的XPath路徑,但其自動生成的XPath路徑通常不是最簡路徑。 |
|