手机
当前位置:查字典教程网 >编程开发 >C#教程 >C# 操作XML文档 使用XmlDocument类方法
C# 操作XML文档 使用XmlDocument类方法
摘要:W3C制定了XMLDOM标准。很多编程语言中多提供了支持W3CXMLDOM标准的API。我在之前的文章中介绍过如何使用Javascript对...

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标准的类。可以用它来创建和查询XML文档。由于XmlDocument要将XML文档的内容全部装载进内存中,所以对于读取内容过大的XML文档,不适合使用XmlDocument类,而可以使用XmlReader来完成读取。

【C# 操作XML文档 使用XmlDocument类方法】相关文章:

HTML文本框的值改变后触发后台代码的方法

C# 大数据导出word的假死报错的处理方法

C#中读写INI文件的方法例子

混合语言编程—C#使用原生的Directx和OpenGL绘图的方法

C# 对XML基本操作代码总结

C#中使用IrisSkin2.dll美化WinForm程序界面的方法

在C#中创建和读取XML文件的实现方法

c#模拟平抛运动动画的方法详解

C# 透明窗体制作实现方法比较分析

C#操作目录与文件的方法步骤

精品推荐
分类导航