XPath語法 在C 中使用XPath示例

2021-06-08 20:19:23 字數 4685 閱讀 4475

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

示例xml:

<?xml version="1.0" encoding="utf-8" ?> 

100this is a black cat

80this is a white cat

80this is a yellow cat

100this is a black dog

80this is a white dog

80this is a yellow dog

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節點的所有屬性節點

2. xpath數**算符

+ 加號表示加

- 表示數字相減

* 表示乘以

div 表示除以,這裡數學上的除號/已經被用作節點之間分隔符了

mod 表示取餘

3. xpath邏輯運算子

= 等於,相當於c#中的 ==

!= 不等於

> 大於

>= 大於等於

< 小於

<= 小於等於

and 並且 與關係

or 或者 或關係

4.xpath axes從字面翻譯這個是xpath軸的意思,但根據我的理解這個翻譯成xpath節點關係運算關鍵字更合適,就是一組關鍵字加上::雙冒號表示和當前節點有關係的乙個或者一組節點.

使用語法: axisname::nodetest[predicate] 即軸名字::節點名字[取節點條件]

具體說明如下:

關鍵字說明示例

示例說明

ancestor

當前節點的父祖節點

ancestor::pig

當前節點的祖先節點中的pig節點

ancestor-or-self

當前節點以及其父祖節點

ancestor::pig

attribute

當前節點的所有屬性

attribute::weight

相當於@weight,attribute::和@是等價的

child

當前節點的所有字節點

child::*[name()!=』price』]

選擇名字不是price的子節點

descendant

子孫節點

descendant::*[@*]

有屬性的子孫節點

descendant-or-self

子孫節點以及當前節點

descendant-or-self::*

following

xml文件中當前節點之後的所有節點

following::*

following-sibling

當前節點的同父弟弟節點

following-sibling::

preceding

xml文件中當前節點之前的所有節點

preceding::*

namespace

選取當前節點的所有命名空間節點

namespace::*

parent

當前節點的父節點

parent::

相當於雙點..

preceding-sibling

當前節點之後的同父兄節點

preceding-sibling::*

self

當前節點

self::*

相當於單點.

5. 常用的xpath函式介紹:

在xpath表示式中常用的函式有下面兩個:

position() 表示節點的序號例如 //cat[position() = 2] 表示取序號為2的dog節點

last() 表示取最後乙個節點 //cat[last()]

name() 表示當前節點名字 /pets/*[name() != 'pig'] 表示/pets下名字不是pig的子節點

以上是xpath的語法,下面我們看下如何在.net中使用xpath

在.net中可以通過xpathdocument或者xmldocument類使用xpath。xpathdocument是唯讀的方式定位xml節點或者屬性文字等,而xmldocument則是可讀寫的。

如下**示例展示了如何使用xpathdocument和xmldocument

using system; 

using system.collections.generic;

using system.linq;

using system.text;

using system.xml.xpath;

using system.xml;

namespace u***pathdotnet

static void u***pathwithxmldocument()

= ", title, url);

} }

static void u***pathwithxpathdocument()

= ",title,url);

} }

} }

xpath使用示例,請看下面的**注釋

using system; 

using system.collections.generic;

using system.linq;

using system.text;

using system.io;

using system.xml;

namespace u***path1

//選擇第二個dog節點

xmlnode theseconddognode = doc.selectsinglenode("//dog[position() = 2]");

//使用xpath ,axes 的 parent 取父節點

xmlnode parentnode = theseconddognode.selectsinglenode("parent::*");

//使用xpath選擇第二個dog節點前面的所有dog節點

xmlnodelist dogpresibling = theseconddognode.selectnodes("preceding::dog");

//取文件的所有子孫節點price

xmlnodelist childrennodes = doc.selectnodes("descendant::price");

} console.read();

} }

}

XPath語法 在C 中使用XPath示例

xpath可以快速定位到xml中的節點或者屬性。xpath語法很簡單,但是強大夠用,它也是使用xslt的基礎知識。示例xml 100this is a black cat 80this is a white cat 80this is a yellow cat 100this is a black ...

在Nuxt中使用scss語法

npm i d node sass sass loadersass基礎語法說明 注意 一定要寫上lang scss 才可以使用scss語法 在assets目錄下新增檔案 my global.scss base color red my btncss 以下兩種引入方式都可以 assets my glo...

在xpath中使用正規表示式

另乙個同級別頁面的正文是 id postmessage 32153 要抓取這種正文其實可以用xpath starts with id,postmessage 或者 contains id,postmessage 也可以選擇在xpath中使用正規表示式 doc.xpath r re match id,...