亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

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

2020-01-24 03:39:02
字體:
來源:轉載
供稿:網友
W3C制定了XML DOM標準。很多編程語言中多提供了支持W3C XML DOM標準的API。我在之前的文章中介紹過如何使用Javascript對XML文檔進行加載與查詢。在本文中,我來介紹一下.Net中的XmlDocument類。它支持并擴展了W3C XML DOM標準。它將整個XML文檔都先裝載進內存中,然后再對XML文檔進行操作,所以如果XML文檔內容過大,不建議使用XmlDocument類,因為會消耗過多內存。對于很大的XML文檔,可以使用XmlReader類來讀取。因為XmlReader使用Steam(流)來讀取文件,所以不會對內存造成太大的消耗。下面就來看一下如何使用XmlDocument類。
(一) 加載
加載XML比較常用的有三種方法:
public virtual void Load(string filename);
public virtual void Load(Stream inStream);
public virtual void LoadXml(string xml);
下面代碼演示如何使用它們:
復制代碼 代碼如下:

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);

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

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

<?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節點:
XmlNodeList nodelist = xmlDoc.SelectNodes("/Customers/Customer/Contact");
foreach (XmlNode node in nodelist)
{
Console.WriteLine(node.OuterXml);
}
輸出結果為:
<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);
輸出結果為:
<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名為Li Li的contact:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer/Contact[text()='Li Li']");
Console.WriteLine(node.OuterXml);
輸出結果:
<Contact gender="female" title="Support">Li Li</Contact>
4. 返回含有contact名為 Li Li 的customer。注意和3的區別:
XmlNode node = xmlDoc.SelectSingleNode("/Customers/Customer[Contact/text()='Li Li']");
Console.WriteLine(node.OuterXml);
輸出結果:
<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);
(三) 創建
以創建以下XML文檔為例:
復制代碼 代碼如下:

<?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>

復制代碼 代碼如下:

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");

總結: XmlDocument類是.Net API中提供的支持W3C XML DOM標準的類??梢杂盟鼇韯摻ê筒樵僗ML文檔。由于XmlDocument要將XML文檔的內容全部裝載進內存中,所以對于讀取內容過大的XML文檔,不適合使用XmlDocument類,而可以使用XmlReader來完成讀取。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂影视av| 久久精品视频亚洲| 91久久久久久久久久久| 久久精品一偷一偷国产| 国产精品福利在线观看| 欧美日韩一区二区免费视频| 欧美精品一区二区三区国产精品| 欧美日韩亚洲网| 91av在线不卡| 亚洲自拍中文字幕| 亚洲精品乱码久久久久久金桔影视| 亚洲人av在线影院| 久久久久久午夜| 国产精品视频内| 成人性生交大片免费看小说| 欧美福利小视频| 日韩av影视综合网| 亚洲国产成人久久综合一区| 国内精品久久久久久中文字幕| 亚洲综合成人婷婷小说| 国产成人精品久久二区二区91| 久99久在线视频| 97久久精品人人澡人人爽缅北| 国产剧情日韩欧美| 国产精品r级在线| 色七七影院综合| 午夜精品一区二区三区在线| 国产美女久久精品香蕉69| 黄色一区二区三区| 亚洲精品中文字幕女同| 中文字幕亚洲色图| 精品久久久av| 97精品国产97久久久久久| 亚洲欧美激情一区| 中文字幕国产亚洲| 亚洲午夜未满十八勿入免费观看全集| 91日韩在线视频| 中日韩午夜理伦电影免费| 日韩在线不卡视频| 亚洲欧美国产一区二区三区| 欧美日韩人人澡狠狠躁视频| 亚洲电影免费观看高清完整版在线| 国产精品91在线| 日韩**中文字幕毛片| 亚洲欧洲日韩国产| 国产精品第100页| 国产精品国产福利国产秒拍| 欧美日韩ab片| 亚洲天堂av在线播放| 欧美一性一乱一交一视频| 国产精品嫩草影院久久久| 亚洲成人xxx| 国产亚洲美女精品久久久| 亚洲激情视频在线观看| 97精品一区二区三区| 国产一区二区黄| 日本19禁啪啪免费观看www| 欧美激情欧美激情在线五月| 黑人巨大精品欧美一区二区三区| 日韩成人激情视频| 亚洲a中文字幕| 亚洲精品福利在线观看| 日韩美女视频免费在线观看| 91夜夜揉人人捏人人添红杏| 日韩视频免费在线观看| 77777亚洲午夜久久多人| 国产脚交av在线一区二区| 亚洲国产精品女人久久久| 国产欧美精品va在线观看| 在线观看国产成人av片| 最好看的2019年中文视频| 国产精品专区h在线观看| 亚洲人成绝费网站色www| 亚洲人免费视频| 日韩精品极品视频免费观看| 黄色成人av在线| 自拍偷拍免费精品| 欧美亚洲激情视频| 色妞欧美日韩在线| 亚洲精品98久久久久久中文字幕| 久久久综合免费视频| 久99久在线视频| 亚洲欧美综合图区| 992tv成人免费视频| 精品亚洲夜色av98在线观看| 91精品国产高清久久久久久91| 亚洲黄页网在线观看| 亚洲精品98久久久久久中文字幕| 2018国产精品视频| 欧美视频国产精品| 欧美在线精品免播放器视频| 久久精品电影一区二区| 亚洲欧美日本另类| 欧美日韩一区二区精品| 亚洲资源在线看| 亚洲午夜av电影| 国产精品综合久久久| 亚洲自拍偷拍视频| 一区二区欧美在线| 国内揄拍国内精品| 亚洲欧洲国产精品| 久久国产视频网站| 欧美日韩亚洲91| 91久久精品久久国产性色也91| 亚洲专区国产精品| 精品久久久久久久久久| 日韩欧美在线看| 精品久久中文字幕久久av| 久久精品视频在线观看| 久久综合免费视频影院| 久久亚洲私人国产精品va| 日本精品va在线观看| 亚洲字幕在线观看| 亚洲男人天堂手机在线| 亚洲成人激情在线观看| 成人两性免费视频| 成人黄色免费网站在线观看| 国产91av在线| 欧美放荡办公室videos4k| 欧美在线观看日本一区| 欧美激情欧美激情在线五月| 久久久精品一区| 91在线精品视频| 97视频在线观看视频免费视频| 亚洲一区二区三区在线视频| 欧美亚州一区二区三区| 精品福利樱桃av导航| 欧洲精品在线视频| 欧美激情女人20p| 欧美性感美女h网站在线观看免费| 久久香蕉频线观| 日本精品在线视频| 日本91av在线播放| 91久久久久久久一区二区| 国产精品第二页| 久久久久久亚洲精品| 青青青国产精品一区二区| 中文字幕欧美精品在线| 久久人人爽人人爽爽久久| 欧美亚洲另类视频| 欧美成人三级视频网站| 亚洲国产精品高清久久久| 亚洲黄色av网站| 中文亚洲视频在线| 国产精品自拍小视频| 97精品一区二区视频在线观看| 日韩av在线影院| 国产精品白丝av嫩草影院| 欧美精品videos性欧美| 国产精品电影观看| 日韩精品高清在线观看| 国产精品在线看| 国产精品三级在线| 国产精品久久久久久久久久久不卡| 日韩中文在线不卡| 欧美成人激情视频| 18性欧美xxxⅹ性满足| 亚洲影视九九影院在线观看| 久久久免费在线观看| 国产成人黄色av| 国产精品678| 成人a在线视频| 一个色综合导航| 亚洲视频欧美视频|