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,...