真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

在c#中如何使用Xpath

小編給大家分享一下在c#中如何使用Xpath,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

10年積累的網(wǎng)站制作、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有原平免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

在c#中,我們經(jīng)常查找,遍歷節(jié)點(diǎn),這是我們可以用到XPath語法,XPath語法很簡單,但是強(qiáng)大夠用,XPath可以快速定位到Xml中的節(jié)點(diǎn)或者屬性,它也是使用xslt的基礎(chǔ)知識(shí)

示例Xml:

  
  
  
100  
this is a black cat  
  
  
80  
this is a white cat  
  
  
80  
this is a yellow cat  
  
   
   
  
100  
this is a black dog  
  
  
80  
this is a white dog  
  
  
80  
this is a yellow dog  
  

XPath的語法:

1. XPath中的符號(hào)

符號(hào)

說明

示例

示例說明

/

表示從根節(jié)點(diǎn)開始選擇

/pets

選擇根節(jié)點(diǎn)pets

表示節(jié)點(diǎn)和子節(jié)點(diǎn)之間的間隔符

/pets/dog

選擇pets節(jié)點(diǎn)下的dog節(jié)點(diǎn)

//xx

表示從整個(gè)xml文檔中查找,而不考慮當(dāng)前節(jié)點(diǎn)位置

//price

選擇文檔中所有的price節(jié)點(diǎn)

.

單個(gè)英文半角句點(diǎn)表示選擇當(dāng)前節(jié)點(diǎn)

/pets/.

選擇pets節(jié)點(diǎn)

..

雙點(diǎn),表示選擇父節(jié)點(diǎn)

/pets/dog[0]/..

表示pets節(jié)點(diǎn),也就是第一個(gè)dog節(jié)點(diǎn)的父節(jié)點(diǎn)

@xx

表示選擇屬性

//dog/@color

表示選擇所有dog節(jié)點(diǎn)的color屬性集合

[…]

中括號(hào)表示選擇條件,括號(hào)內(nèi)為條件

//dog[@color=’white’]

所有color為white的dog節(jié)點(diǎn)

//dog[/price<100]

所有price字節(jié)點(diǎn)值小于100的dog節(jié)點(diǎn)

中括號(hào)內(nèi)數(shù)字為節(jié)點(diǎn)索引,類似c#等語言中的數(shù)組,數(shù)組下標(biāo)是從1開始的

//dog[1]

第1個(gè)dog節(jié)點(diǎn)

//dog[last()]

最后一個(gè)dog節(jié)點(diǎn),last()是xPath內(nèi)置函數(shù)

|

單豎杠表示合并節(jié)點(diǎn)結(jié)合

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

color屬性為white的dog節(jié)點(diǎn)和color屬性為white的cat節(jié)點(diǎn)

*

星號(hào)表示任何名字的節(jié)點(diǎn)或者屬性

//dog/*

表示dog節(jié)點(diǎn)的所有子節(jié)點(diǎn)

//dog/@*

表示dog節(jié)點(diǎn)的所有屬性節(jié)點(diǎn)

2. XPath數(shù)學(xué)運(yùn)算符

+ 加號(hào)表示加

- 表示數(shù)字相減

* 表示乘以

p 表示除以,這里數(shù)學(xué)上的除號(hào)/已經(jīng)被用作節(jié)點(diǎn)之間分隔符了

mod 表示取余

3. XPath邏輯運(yùn)算符

= 等于,相當(dāng)于c#中的 ==

!= 不等于

> 大于

>= 大于等于

< 小于

<= 小于等于

and 并且 與關(guān)系

or 或者 或關(guān)系

4. XPath Axes從字面翻譯這個(gè)是XPath軸的意思,但根據(jù)我的理解這個(gè)翻譯成XPath節(jié)點(diǎn)關(guān)系運(yùn)算關(guān)鍵字更合適,就是一組關(guān)鍵字加上::雙冒號(hào)表示和當(dāng)前節(jié)點(diǎn)有關(guān)系的一個(gè)或者一組節(jié)點(diǎn).

使用語法: axisname::nodetest[predicate] 即軸名字::節(jié)點(diǎn)名字[取節(jié)點(diǎn)條件]

具體說明如下:

關(guān)鍵字

說明

示例

示例說明

ancestor

當(dāng)前節(jié)點(diǎn)的父祖節(jié)點(diǎn)

ancestor::pig

當(dāng)前節(jié)點(diǎn)的祖先節(jié)點(diǎn)中的pig節(jié)點(diǎn)

ancestor-or-self

當(dāng)前節(jié)點(diǎn)以及其父祖節(jié)點(diǎn)

ancestor::pig


attribute

當(dāng)前節(jié)點(diǎn)的所有屬性

attribute::weight

相當(dāng)于@weight,attribute::和@是等價(jià)的

child

當(dāng)前節(jié)點(diǎn)的所有字節(jié)點(diǎn)

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

選擇名字不是price的子節(jié)點(diǎn)

descendant

子孫節(jié)點(diǎn)

descendant::*[@*]

有屬性的子孫節(jié)點(diǎn)

descendant-or-self

子孫節(jié)點(diǎn)以及當(dāng)前節(jié)點(diǎn)

descendant-or-self::*


following

Xml文檔中當(dāng)前節(jié)點(diǎn)之后的所有節(jié)點(diǎn)

following::*


following-sibling

當(dāng)前節(jié)點(diǎn)的同父弟弟節(jié)點(diǎn)

following-sibling::


preceding

Xml文檔中當(dāng)前節(jié)點(diǎn)之前的所有節(jié)點(diǎn)

preceding::*


namespace

選取當(dāng)前節(jié)點(diǎn)的所有命名空間節(jié)點(diǎn)

namespace::*


parent

當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

parent::

相當(dāng)于雙點(diǎn)..

preceding-sibling

當(dāng)前節(jié)點(diǎn)之后的同父兄節(jié)點(diǎn)

preceding-sibling::*


self

當(dāng)前節(jié)點(diǎn)

self::*

相當(dāng)于單點(diǎn).

5. 常用的XPath函數(shù)介紹:

在XPath表達(dá)式中常用的函數(shù)有下面兩個(gè):

position() 表示節(jié)點(diǎn)的序號(hào)例如 //cat[position() = 2] 表示取序號(hào)為2的dog節(jié)點(diǎn)

last() 表示取最后一個(gè)節(jié)點(diǎn) //cat[last()]

name() 表示當(dāng)前節(jié)點(diǎn)名字 /pets/*[name() != 'pig'] 表示/pets下名字不是pig的子節(jié)點(diǎn)

XPath的函數(shù)還有很多,包括字符串函數(shù),數(shù)字函數(shù)和時(shí)間函數(shù)等,具體可以參考w3的網(wǎng)站。

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

在.Net中可以通過XPathDocument或者XmlDocument類使用XPath。XPathDocument是只讀的方式定位Xml節(jié)點(diǎn)或者屬性文本等,而XmlDocument則是可讀寫的。

如下代碼示例展示了如何使用XPathDocument和XmlDocument

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.XPath;
using System.Xml;
 
namespace UseXPathDotNet
{
class Program
{
static void Main(string[] args)
{
UseXPathWithXPathDocument();
 
UseXPathWithXmlDocument();
 
Console.Read();
}
 
static void UseXPathWithXmlDocument()
{
XmlDocument doc = new XmlDocument();
doc.Load("http://www.cnblogs.com/yukaizhao/rss");
//使用xPath選擇需要的節(jié)點(diǎn)
XmlNodeList nodes = doc.SelectNodes("/rss/channel/item[position()<=10]");
foreach (XmlNode item in nodes)
{
string title = item.SelectSingleNode("title").InnerText;
string url = item.SelectSingleNode("link").InnerText;
Console.WriteLine("{0} = {1}", title, url);
}
}
 
static void UseXPathWithXPathDocument()
{
XPathDocument doc = new XPathDocument("http://www.cnblogs.com/yukaizhao/rss");
XPathNavigator xPathNav = doc.CreateNavigator();
//使用xPath取rss中最新的10條隨筆
XPathNodeIterator nodeIterator = xPathNav.Select("/rss/channel/item[position()<=10]");
while (nodeIterator.MoveNext())
{
XPathNavigator itemNav = nodeIterator.Current;
string title = itemNav.SelectSingleNode("title").Value;
string url = itemNav.SelectSingleNode("link").Value;
Console.WriteLine("{0} = {1}",title,url);
}
 
}
}
}

XPath使用示例,請看下面的代碼注釋 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
 
namespace UseXPath2
{
class Program
{
static void Main(string[] args)
{
string xml = @"


100
this is a black cat


80
this is a white cat


110
this is a yellow cat

 
 

114
this is a black dog


80
this is a white dog


80
this is a yellow dog

 

8000
this is a white pig

";
 
using (StringReader rdr = new StringReader(xml))
{
XmlDocument doc = new XmlDocument();
doc.Load(rdr);
 
//取所有pets節(jié)點(diǎn)下的dog字節(jié)點(diǎn)
XmlNodeList nodeListAllDog = doc.SelectNodes("/pets/dog");
 
//所有的price節(jié)點(diǎn)
XmlNodeList allPriceNodes = doc.SelectNodes("http://price");
 
//取最后一個(gè)price節(jié)點(diǎn)
XmlNode lastPriceNode = doc.SelectSingleNode("http://price[last()]");
 
//用雙點(diǎn)號(hào)取price節(jié)點(diǎn)的父節(jié)點(diǎn)
XmlNode lastPriceParentNode = lastPriceNode.SelectSingleNode("..");
 
//選擇weight*count=40的所有動(dòng)物,使用通配符*
XmlNodeList nodeList = doc.SelectNodes("/pets/*[@weight*@count=40]");
 
//選擇除了pig之外的所有動(dòng)物,使用name()函數(shù)返回節(jié)點(diǎn)名字
XmlNodeList animalsExceptPigNodes = doc.SelectNodes("/pets/*[name() != 'pig']");
 
 
//選擇價(jià)格大于100而不是pig的動(dòng)物
XmlNodeList priceGreaterThan100s = doc.SelectNodes("/pets/*[price p @weight >10 and name() != 'pig']");
foreach (XmlNode item in priceGreaterThan100s)
{
Console.WriteLine(item.OuterXml);
}
 
//選擇第二個(gè)dog節(jié)點(diǎn)
XmlNode theSecondDogNode = doc.SelectSingleNode("http://dog[position() = 2]");
 
//使用xpath ,axes 的 parent 取父節(jié)點(diǎn)
XmlNode parentNode = theSecondDogNode.SelectSingleNode("parent::*");
 
//使用xPath選擇第二個(gè)dog節(jié)點(diǎn)前面的所有dog節(jié)點(diǎn)
XmlNodeList dogPresibling = theSecondDogNode.SelectNodes("preceding::dog");
 
//取文檔的所有子孫節(jié)點(diǎn)price
XmlNodeList childrenNodes = doc.SelectNodes("descendant::price");
}
 
Console.Read();
}
}
}

以上是“在c#中如何使用Xpath”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享名稱:在c#中如何使用Xpath
URL網(wǎng)址:http://weahome.cn/article/pcoscj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部