最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 操作XML文檔 使用XmlDocument類方法

 更新時(shí)間:2012年11月21日 11:06:51   作者:  
對(duì)于很大的XML文檔,可以使用XmlReader類來(lái)讀取。因?yàn)閄mlReader使用Steam(流)來(lái)讀取文件,所以不會(huì)對(duì)內(nèi)存造成太大的消耗。下面就來(lái)看一下如何使用XmlDocument類,需要的朋友可以參考下
W3C制定了XML DOM標(biāo)準(zhǔn)。很多編程語(yǔ)言中多提供了支持W3C XML DOM標(biāo)準(zhǔn)的API。我在之前的文章中介紹過如何使用Javascript對(duì)XML文檔進(jìn)行加載與查詢。在本文中,我來(lái)介紹一下.Net中的XmlDocument類。它支持并擴(kuò)展了W3C XML DOM標(biāo)準(zhǔn)。它將整個(gè)XML文檔都先裝載進(jìn)內(nèi)存中,然后再對(duì)XML文檔進(jìn)行操作,所以如果XML文檔內(nèi)容過大,不建議使用XmlDocument類,因?yàn)闀?huì)消耗過多內(nèi)存。對(duì)于很大的XML文檔,可以使用XmlReader類來(lái)讀取。因?yàn)閄mlReader使用Steam(流)來(lái)讀取文件,所以不會(huì)對(duì)內(nèi)存造成太大的消耗。下面就來(lái)看一下如何使用XmlDocument類。
(一) 加載
加載XML比較常用的有三種方法:
public virtual void Load(string filename);
public virtual void Load(Stream inStream);
public virtual void LoadXml(string xml);
下面代碼演示如何使用它們:
復(fù)制代碼 代碼如下:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("XMLFile1.xml");
Entity retrievedAnnotation = _orgService.Retrieve("annotation"
, new Guid("C1B13C7F-F430-E211-8FA1-984BE1731399"), new ColumnSet(true));
byte[] fileContent = Convert.FromBase64String(retrievedAnnotation["documentbody"].ToString());
MemoryStream ms = new MemoryStream(fileContent);
XmlDocument xmlDoc2 = new XmlDocument();
xmlDoc2.Load(ms);
string str = @"<Customers><Customer id='01' city='Beijing' country='China' name='Lenovo'/></Customers>";
XmlDocument xmlDoc3 = new XmlDocument();
xmlDoc3.LoadXml(str);

(二) 查詢
對(duì)XML的元素、屬性、文本的查詢可以使用XPath。具體的定義可以參看w3school。
首先應(yīng)該了解一下XPath表達(dá)式:
表達(dá)式 描述
nodename 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)。
/ 從根節(jié)點(diǎn)選取。
// 從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。
. 選取當(dāng)前節(jié)點(diǎn)。
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
@ 選取屬性。

我們主要使用兩個(gè)方法來(lái)查詢XML文檔,SelectNodes(xpath expression)和SelectSingleNode(xpath expression)。
SelectNodes返回一個(gè)XmlNodeList對(duì)象,也就是所有符合xpath表達(dá)式的xml節(jié)點(diǎn)都將會(huì)被返回,你需要對(duì)返回的結(jié)果進(jìn)行遍歷。
SelectSingleNode只返回第一個(gè)符合xpath表達(dá)式的節(jié)點(diǎn),或者返回null。
以下面的XML文件為例,我們進(jìn)行一些演示:
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<Customers>
<Customer id="01" city="Beijing" country="China" name="Lenovo">
<Contact gender="female" title="Support">Li Li</Contact>
</Customer>
<Customer id="02" city="Amsterdam" country="The Netherlands" name="Shell">
<Contact gender="male" title="Sales Person">Aaron Babbitt</Contact>
<Contact gender="female" title="Sales Manager">Daisy Cabell</Contact>
<Contact gender="male" title="Sales Person">Gabriel Eads</Contact>
</Customer>
</Customers>

1. 返回所有Contact節(jié)點(diǎn):
XmlNodeList nodelist = xmlDoc.SelectNodes("/Customers/Customer/Contact");
foreach (XmlNode node in nodelist)
{
Console.WriteLine(node.OuterXml);
}
輸出結(jié)果為:
<Contact gender="female" title="Support">Li Li</Contact>
<Contact gender="male" title="Sales Person">Aaron Babbitt</Contact>
<Contact gender="female" title="Sales Manager">Daisy Cabell</Contact>
<Contact gender="male" title="Sales Person">Gabriel Eads</Contact>
2. 返回id為02的customer:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer[@id='02']");
Console.WriteLine(node.OuterXml);
輸出結(jié)果為:
<Customer id="02" city="Amsterdam" country="The Netherlands" name="Shell">
<Contact gender="male" title="Sales Person">Aaron Babbitt</Contact>
<Contact gender="female" title="Sales Manager">Daisy Cabell</Contact>
<Contact gender="male" title="Sales Person">Gabriel Eads</Contact>
</Customer>
3. 返回含有contact名為L(zhǎng)i Li的contact:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer/Contact[text()='Li Li']");
Console.WriteLine(node.OuterXml);
輸出結(jié)果:
<Contact gender="female" title="Support">Li Li</Contact>
4. 返回含有contact名為 Li Li 的customer。注意和3的區(qū)別:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer[Contact/text()='Li Li']");
Console.WriteLine(node.OuterXml);
輸出結(jié)果:
<Customer id="01" city="Beijing" country="China" name="Lenovo">
<Contact gender="female" title="Support">Li Li</Contact>
</Customer>
5. (1) 獲取outer xml:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer[@id='02']");
Console.WriteLine(node.OuterXml);
(2) 獲取 inner xml:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer[@id='02']");
Console.WriteLine(node.InnerXml);
(3) 獲取 text
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer/Contact[text()='Li Li']");
Console.WriteLine(node.InnerText);
(4) 獲取屬性
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer/Contact[text()='Li Li']");
Console.WriteLine(node.Attributes["gender"].Value);
(三) 創(chuàng)建
以創(chuàng)建以下XML文檔為例:
復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<Customers>
<Customer id="01" name="Lenovo" country="China" city="Beijing">
<Contact title="Support" gender="female">Li Li</Contact>
</Customer>
</Customers>

復(fù)制代碼 代碼如下:

var xmlDoc = new XmlDocument();
//Create the xml declaration first
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
//Create the root node and append into doc
var el = xmlDoc.CreateElement("Customers");
xmlDoc.AppendChild(el);
// Customer Lenovo
XmlElement elementCustomer = xmlDoc.CreateElement("Customer");
XmlAttribute attrID = xmlDoc.CreateAttribute("id");
attrID.Value = "01";
elementCustomer.Attributes.Append(attrID);
XmlAttribute cityID = xmlDoc.CreateAttribute("city");
cityID.Value = "Beijing";
elementCustomer.Attributes.Append(cityID);
XmlAttribute attrCountry = xmlDoc.CreateAttribute("country");
attrCountry.Value = "China";
elementCustomer.Attributes.Append(attrCountry);
XmlAttribute nameCountry = xmlDoc.CreateAttribute("name");
nameCountry.Value = "Lenovo";
elementCustomer.Attributes.Append(nameCountry);
el.AppendChild(elementCustomer);
// Contact Li Li
XmlElement elementContact = xmlDoc.CreateElement("Contact");
elementContact.InnerText = "Li Li";
XmlAttribute attrGender = xmlDoc.CreateAttribute("gender");
attrGender.Value = "female";
elementContact.Attributes.Append(attrGender);
XmlAttribute titleGender = xmlDoc.CreateAttribute("title");
titleGender.Value = "Support";
elementContact.Attributes.Append(titleGender);
elementCustomer.AppendChild(elementContact);
xmlDoc.Save("test.xml");

總結(jié): XmlDocument類是.Net API中提供的支持W3C XML DOM標(biāo)準(zhǔn)的類??梢杂盟鼇?lái)創(chuàng)建和查詢XML文檔。由于XmlDocument要將XML文檔的內(nèi)容全部裝載進(jìn)內(nèi)存中,所以對(duì)于讀取內(nèi)容過大的XML文檔,不適合使用XmlDocument類,而可以使用XmlReader來(lái)完成讀取。

相關(guān)文章

  • C#面向切面編程之AspectCore用法詳解

    C#面向切面編程之AspectCore用法詳解

    AspectCore?是Lemon名下的一個(gè)國(guó)產(chǎn)Aop框架,提供了一個(gè)全新的輕量級(jí)和模塊化的Aop解決方案,下面我們就來(lái)深入了解下AspectCore在C#中的具體使用吧
    2024-01-01
  • C#用記事本編寫簡(jiǎn)單WinForm窗體程序

    C#用記事本編寫簡(jiǎn)單WinForm窗體程序

    這篇文章主要為大家詳細(xì)介紹了C#用記事本編寫簡(jiǎn)單WinForm窗體程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C# 數(shù)組中的 indexOf 方法及使用

    C# 數(shù)組中的 indexOf 方法及使用

    這篇文章主要介紹了C# 數(shù)組中的 indexOf 方法以及indexof方法的使用講解,需要的朋友可以參考下
    2018-02-02
  • WPF中使用CallerMemberName簡(jiǎn)化InotifyPropertyChanged的實(shí)現(xiàn)

    WPF中使用CallerMemberName簡(jiǎn)化InotifyPropertyChanged的實(shí)現(xiàn)

    這篇文章介紹了WPF中使用CallerMemberName簡(jiǎn)化InotifyPropertyChanged的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#使用CefSharp控件實(shí)現(xiàn)爬蟲

    C#使用CefSharp控件實(shí)現(xiàn)爬蟲

    這篇文章介紹了C#使用CefSharp控件實(shí)現(xiàn)爬蟲的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 解析C#設(shè)計(jì)模式之單例模式

    解析C#設(shè)計(jì)模式之單例模式

    這篇文章主要介紹了C#設(shè)計(jì)模式之單例模式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c# 設(shè)計(jì)模式的內(nèi)容,感興趣的朋友可以了解下
    2020-12-12
  • C#動(dòng)態(tài)執(zhí)行批處理命令的方法

    C#動(dòng)態(tài)執(zhí)行批處理命令的方法

    這篇文章主要介紹了C#動(dòng)態(tài)執(zhí)行批處理命令的方法,可實(shí)現(xiàn)動(dòng)態(tài)執(zhí)行一系列控制臺(tái)命令,并允許實(shí)時(shí)顯示出來(lái)執(zhí)行結(jié)果,需要的朋友可以參考下
    2014-11-11
  • 在C#中使用適配器Adapter模式和擴(kuò)展方法解決面向?qū)ο笤O(shè)計(jì)問題記錄

    在C#中使用適配器Adapter模式和擴(kuò)展方法解決面向?qū)ο笤O(shè)計(jì)問題記錄

    在開發(fā)基于MonoGame的游戲框架時(shí),面臨SpriteFont和DynamicSpriteFont兼容問題,SpriteFont在內(nèi)容管道中編譯確定字號(hào),導(dǎo)致不同字號(hào)需加載多個(gè)字體資源,本文給大家介紹在C#中使用適配器Adapter模式和擴(kuò)展方法解決面向?qū)ο笤O(shè)計(jì)問題,感興趣的朋友一起看看吧
    2024-10-10
  • C#手工雙緩沖技術(shù)用法實(shí)例分析

    C#手工雙緩沖技術(shù)用法實(shí)例分析

    這篇文章主要介紹了C#手工雙緩沖技術(shù)用法,實(shí)例分析了手工雙緩沖技術(shù)的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • 詳解C#擴(kuò)展方法原理及其使用

    詳解C#擴(kuò)展方法原理及其使用

    這篇文章主要介紹了C#擴(kuò)展方法原理及其使用的的相關(guān)資料,文中代碼非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評(píng)論

昌乐县| 武义县| 建瓯市| 鹿邑县| 道孚县| 波密县| 双辽市| 静宁县| 杨浦区| 深水埗区| 樟树市| 栖霞市| 容城县| 洛隆县| 获嘉县| 江门市| 广德县| 麻城市| 铜山县| 宝鸡市| 天柱县| 道孚县| 四川省| 福海县| 邹平县| 抚宁县| 新巴尔虎右旗| 凤山县| 西乌珠穆沁旗| 广宗县| 文安县| 仪陇县| 中牟县| 平南县| 囊谦县| 察哈| 米林县| 绥阳县| 调兵山市| 广饶县| 霍城县|