C#導(dǎo)航器Xpath與XPathNavigator類
XPathNavigator類包含移動(dòng)和選擇XML所需元素的所有方法。
一、創(chuàng)建:CreateNavigator
1、XPathNavigator類,如果是從XPathDocument中創(chuàng)建,則是只讀的,只能瀏覽數(shù)據(jù);
XPathDocument doc = new XPathDocument("./books.xml");
XPathNavigator nav = ((IXPathNavigable)doc).CreateNavigator();2、XPathNavigator類,如果是從XmlDocument中創(chuàng)建,則可以編輯文檔;
XmlDocument doc = new XmlDocument();
doc.Load("./books.xml");
XPathNavigator nav2 = doc.CreateNavigator();二、讀?。篠elect()
- 使用Select()方法通過XPath語(yǔ)句查詢,得到XPathNodeIterator對(duì)象;
- 遍歷XPathNodeIterator迭代器,MoveNext()方法移動(dòng)下一個(gè)節(jié)點(diǎn);Current屬性表示當(dāng)前節(jié)點(diǎn);
//查詢bookstore的子元素book中g(shù)enre屬性值為novel的所有節(jié)點(diǎn)
XPathNodeIterator iter = nav.Select("/bookstore/book[@genre='novel']");
while (iter.MoveNext())
{
//迭代所有子代節(jié)點(diǎn)
XPathNodeIterator newIter = iter.Current.SelectDescendants(XPathNodeType.Element, false);
while (newIter.MoveNext())
{
Console.WriteLine(newIter.Current.Name+ " : " +newIter.Current.Value);
}
}三、計(jì)算:Evaluate
使用Evaluate()方法計(jì)算表達(dá)式的值;
//統(tǒng)計(jì)圖書總價(jià)
Console.WriteLine("Total price = {0}", nav.Evaluate("sum(bookstore/book/price)"));四、編輯
插入節(jié)點(diǎn):先檢查CanEdit屬性是否為true,再使用InsertAfter()方法插入新節(jié)點(diǎn)。
XmlDocument doc = new XmlDocument();
doc.Load("./books.xml");
XPathNavigator nav2 = doc.CreateNavigator();
//判斷是否可編輯
if (nav2.CanEdit)
{
XPathNodeIterator iter = nav2.Select("bookstore/book/price");
while (iter.MoveNext())
{
//在當(dāng)前節(jié)點(diǎn)之后插入新節(jié)點(diǎn)
iter.Current.InsertAfter("5");
}
}
doc.Save("./newBooks.xml");五、轉(zhuǎn)換XmlReader ,XmlWriter
通過XPathNavigator轉(zhuǎn)換為XmlReader ,XmlWriter讀寫數(shù)據(jù)
//讀:
XmlReader reader=nav.ReadSubtree();
while(reader.Read())
{
Console.Write(reader.ReadOuterXml());
}
//寫:
XmlWriter writer=XmlWriter.Create("./1.xml");
nav.WriteSubtree(writer);
writer.Close();到此這篇關(guān)于C#導(dǎo)航器Xpath與XPathNavigator類的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#使用WebSocket與網(wǎng)頁(yè)實(shí)時(shí)通信的實(shí)現(xiàn)示例
本文主要介紹了C#使用WebSocket與網(wǎng)頁(yè)實(shí)時(shí)通信的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
C# webservice接口編寫、發(fā)布與測(cè)試
這篇文章主要介紹了C# webservice接口編寫、發(fā)布與測(cè)試,文章通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或共組有一定的幫助,需要的朋友可以參考下2024-07-07
C#制作多線程處理強(qiáng)化版網(wǎng)絡(luò)爬蟲
這篇文章主要介紹了C#制作多線程處理強(qiáng)化版網(wǎng)絡(luò)爬蟲的相關(guān)代碼,有想學(xué)習(xí)C#多線程編程的小伙伴可以參考下2016-09-09
C#常用多線程(線程同步,事件觸發(fā),信號(hào)量,互斥鎖,共享內(nèi)存,消息隊(duì)列)
這篇文章主要介紹了C#常用多線程(線程同步,事件觸發(fā),信號(hào)量,互斥鎖,共享內(nèi)存,消息隊(duì)列),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
微信開放平臺(tái)之網(wǎng)站授權(quán)微信登錄功能
本文通過.net實(shí)現(xiàn)的微信開放平臺(tái)之網(wǎng)站授權(quán)微信登錄功能,需要的小伙伴一起看看吧2015-09-09
利用C#編寫Linux守護(hù)進(jìn)程實(shí)例代碼
如今的編程是一場(chǎng)程序員和上帝的競(jìng)賽,程序員要開發(fā)出更大更好、傻瓜都會(huì)用到軟件,下面這篇文章主要給大家介紹了關(guān)于利用C#編寫Linux守護(hù)進(jìn)程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2018-01-01
快速學(xué)習(xí)C# 設(shè)計(jì)模式之職責(zé)鏈模式
這篇文章主要介紹了C# 設(shè)計(jì)模式之職責(zé)鏈模式的的相關(guān)資料,文中代碼非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06

