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();
二、讀取:Select()
- 使用Select()方法通過(guò)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
通過(guò)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#?使用Fluent?API?創(chuàng)建自己的DSL(推薦)
DSL領(lǐng)域?qū)S谜Z(yǔ)言是描述特定領(lǐng)域問(wèn)題的語(yǔ)言,聽起來(lái)很唬人,其實(shí)不是什么高深的東西,下面通過(guò)實(shí)例代碼介紹下C#?使用Fluent?API?創(chuàng)建自己的DSL,感興趣的朋友參考下吧2021-12-12C#使用偽隨機(jī)數(shù)實(shí)現(xiàn)加密用戶密碼的方法
這篇文章主要介紹了C#使用偽隨機(jī)數(shù)實(shí)現(xiàn)加密用戶密碼的方法,對(duì)于開發(fā)C#會(huì)員系統(tǒng)或者程序安全問(wèn)題都有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-07-07C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
本文給大家介紹的是C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法,十分的方便也很實(shí)用,有需要的小伙伴可以參考下。2015-06-06C#實(shí)現(xiàn)簡(jiǎn)易的加密、解密字符串工具類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)易的加密、解密字符串工具類,涉及C#字符串加密與加密的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#中WebBrowser.DocumentCompleted事件多次調(diào)用問(wèn)題解決方法
這篇文章主要介紹了C#中WebBrowser.DocumentCompleted事件多次調(diào)用問(wèn)題解決方法,本文講解了3種情況和各自情況的解決方法,需要的朋友可以參考下2015-01-01.net文件上傳時(shí)實(shí)現(xiàn)通過(guò)文件頭確認(rèn)文件類型的方法
這篇文章主要介紹了.net文件上傳時(shí)實(shí)現(xiàn)通過(guò)文件頭確認(rèn)文件類型的方法,很實(shí)用的功能,需要的朋友可以參考下2014-07-07在多線程中調(diào)用winform窗體控件的實(shí)現(xiàn)方法
這篇文章主要介紹了在多線程中調(diào)用winform窗體控件的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-08-08