XPath語法 在C#中使用XPath示例


XPath可以快速定位到Xml中的節點或者屬性。XPath語法很簡單,但是強大夠用,它也是使用xslt的基礎知識。

示例Xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<? xml  version="1.0" encoding="utf-8" ?>
< pets >
   < cat  color="black" weight="10">
     < price >100</ price >
     < desc >this is a black cat</ desc >
   </ cat >
   < cat  color="white" weight="9">
     < price >80</ price >
     < desc >this is a white cat</ desc >
   </ cat >
   < cat  color="yellow" weight="15">
     < price >80</ price >
     < desc >this is a yellow cat</ desc >
   </ cat >
 
 
   < dog  color="black" weight="10">
     < price >100</ price >
     < desc >this is a black dog</ desc >
   </ dog >
   < dog  color="white" weight="9">
     < price >80</ price >
     < desc >this is a white dog</ desc >
   </ dog >
   < dog  color="yellow" weight="15">
     < price >80</ price >
     < desc >this is a yellow dog</ desc >
   </ dog >
</ pets >

 

XPath的語法:

1. XPath中的符號

符號

說明

示例

示例說明

/

表示從根節點開始選擇

/pets

選擇根節點pets

表示節點和子節點之間的間隔符

/pets/dog

選擇pets節點下的dog節點

//xx

表示從整個xml文檔中查找,而不考慮當前節點位置

//price

選擇文檔中所有的price節點

.

單個英文半角句點表示選擇當前節點

/pets/.

選擇pets節點

..

雙點,表示選擇父節點

/pets/dog[0]/..

表示pets節點,也就是第一個dog節點的父節點

@xx

表示選擇屬性

//dog/@color

表示選擇所有dog節點的color屬性集合

[…]

中括號表示選擇條件,括號內為條件

//dog[@color=’white’]

所有color為white的dog節點

//dog[/price<100]

所有price字節點值小於100的dog節點

中括號內數字為節點索引,類似c#等語言中的數組,數組下標是從1開始的

//dog[1]

第1個dog節點

//dog[last()]

最后一個dog節點,last()是xPath內置函數

|

單豎杠表示合並節點結合

//dog[@color=’white’] | //cat[@color=’white’]

color屬性為white的dog節點和color屬性為white的cat節點

*

星號表示任何名字的節點或者屬性

//dog/*

表示dog節點的所有子節點

//dog/@*

表示dog節點的所有屬性節點

 

XPath是XML的查詢語言,和SQL的角色很類似。以下面XML為例,介紹XPath的語法。下面的一些資料是幾年前學習這個的時候,從網絡以及博客園獲取的一些資料,暫時找不到出處,例子和文字基本都是借鑒,再次謝過。如果大家發現類似的一起文章,告訴我鏈接,我加上引用。下面的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>
</catalog>
復制代碼

定位節點:XML是樹狀結構,類似檔案系統內數據夾的結構,XPath也類似檔案系統的路徑命名方式。不過XPath是一種模式(Pattern),可以選出XML檔案中,路徑符合某個模式的所有節點出來。例如要選catalog底下的cd中所有price元素可以用:

/catalog/cd/price

  如果XPath的開頭是一個斜線(/)代表這是絕對路徑。如果開頭是兩個斜線(//)表示文件中所有符合模式的元素都會被選出來,即使是處於樹中不同的層級也會被選出來。以下的語法會選出文件中所有叫做cd的元素(在樹中的任何層級都會被選出來)://cd

選擇未知的元素:使用星號(*)可以選擇未知的元素。下面這個語法會選出/catalog/cd的所有子元素:  

/catalog/cd/*

  以下的語法會選出所有catalog的子元素中,包含有price作為子元素的元素。

/catalog/*/price

  以下的語法會選出有兩層父節點,叫做price的所有元素。

/*/*/price

  要注意的是,想要存取不分層級的元素,XPath語法必須以兩個斜線開頭(//),想要存取未知元素才用星號(*),星號只能代表未知名稱的元素,不能代表未知層級的元素。

選擇分支:使用中括號可以選擇分支。以下的語法從catalog的子元素中取出第一個叫做cd的元素。XPath的定義中沒有第0元素這種東西。

/catalog/cd[1]

以下語法選擇catalog中的最后一個cd元素:(XPathj並沒有定義first()這種函式喔,用上例的[1]就可以取出第一個元素。

/catalog/cd[last()]

以下語法選出price元素的值等於10.90的所有/catalog/cd元素

/catalog/cd[price=10.90]

選擇屬性:在XPath中,除了選擇元素以外,也可以選擇屬性。屬性都是以@開頭。例如選擇文件中所有叫做country的屬性:

//@country

以下語法選擇出country屬性值為UK的cd元素

//cd[@country='UK']


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM