標籤:style http ar io color os 使用 sp on
XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言 (SGML)的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在資料結構樹中找尋節點的能力。XPath 是 XML 的查詢語言,和 SQL 的角色很類似。以下面 XML 為例,介紹 XPath 的文法。
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd country="USA">
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<price>10.90</price>
</cd>
<cd country="UK__time">
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<price>9.90</price>
</cd>
<cd country="UK">
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<price>9.90</price>
</cd>
<cd country="USA">
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<price>9.90</price>
</cd></catalog>
</catalog>
定位節點
XML 是樹狀結構,類似檔案系統內資料夾的結構,XPath 也類似檔案系統的路徑命名方式。不過 XPath 是一種模式(Pattern),可以選出 XML 檔案中,路徑符合某個模式的所有節點出來。
1)要選 catalog 底下的 cd 中所有 price 元素可以用:
/catalog/cd/price
如果 XPath 的開頭是一個斜線(/)代表這是絕對路徑。如果開頭是兩個斜線(//)表示檔案中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來。
2)選出檔案中所有叫做 cd 的元素(在樹中的任何層級都會被選出來):
//cd
使用星號(Wildcards,*)可以選擇未知的元素。
3)選出/catalog/cd 的所有子項目:
/catalog/cd/*
4)選出所有 catalog 的子項目中,包含有 price 作為子項目的元素。
/catalog/*/price
5)選出有兩層父節點,叫做 price 的所有元素。
/*/*/price
6)選擇出檔案中的所有元素。
//*
要注意的是,想要存取不分層級的元素,XPath 文法必須以兩個斜線開頭(//),想要存取未知元素才用星號(*),星號只能代表未知名稱的元素,不能代表未知層級的元素。
選擇分支
使用中括弧可以選擇分支。
1)從 catalog 的子項目中取出第一個叫做 cd 的元素。XPath 的定義中沒有第0元素
/catalog/cd[1]
2)選擇 catalog 中的最後一個 cd 元素: XPath 沒有定義 first() 這種函式,用上例的 [1]就可以取出第一個元素。
/catalog/cd[last()]
3)選出含有 price 子項目的所有/catalog/cd 元素。
/catalog/cd[price]
4)選出 price 元素的值等於10.90的所有/catalog/cd 元素
/catalog/cd[price=10.90]
5)選出 price 元素的值等於10.90的所有/catalog/cd 元素 的 price 元素
/catalog/cd[price=10.90]/price
選擇一個以上的路徑
使用 Or 運算元(|)就可以選擇一個以上的路徑
1)選擇所有 title 以及 artist 元素
//title | //artist
2)選擇所有 title 以及 artist 以及 price 元素
//title | //artist | //price
選擇屬性
在XPath的屬性。除了選擇元素以外,也可以選擇屬性,屬性都是以@開頭。
1)選擇檔案中所有叫做 country的屬性。
//@conutry
2)選擇所有含有country 這個屬性的 cd元素。
//cd[@country]
3) 選擇出country屬性值為UK的cd元素
//country[@country==‘UK‘]
部分匹配
有些屬性的值具有一定的規律,例如上面的UK就是首碼,一部分是不變的。也可以用start-with
1)定位屬性值首碼為UK_的元素
//cd[containers(@country,‘UK_‘)]
//cd[start-with(@country,‘UK_‘)]
這是在某個文檔裡面學習來的,感覺簡單又易上手,故摘錄於此。
簡單的XPath入門