源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C# 操作XML文档 使用XmlDocument类方法

  • 时间:2020-07-15 06:46 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C# 操作XML文档 使用XmlDocument类方法
W3C制定了XML DOM标准。很多编程语言中多提供了支持W3C XML DOM标准的API。我在之前的文章中介绍过如何使用Javascript对XML文档进行加载与查询。在本文中,我来介绍一下.Net中的XmlDocument类。它支持并扩展了W3C XML DOM标准。它将整个XML文档都先装载进内存中,然后再对XML文档进行操作,所以如果XML文档内容过大,不建议使用XmlDocument类,因为会消耗过多内存。对于很大的XML文档,可以使用XmlReader类来读取。因为XmlReader使用Steam(流)来读取文件,所以不会对内存造成太大的消耗。下面就来看一下如何使用XmlDocument类。 [b](一) 加载[/b] 加载XML比较常用的有三种方法: public virtual void Load(string filename); public virtual void Load(Stream inStream); public virtual void LoadXml(string xml); 下面代码演示如何使用它们:
[u]复制代码[/u] 代码如下:
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);
[b](二) 查询[/b] 对XML的元素、属性、文本的查询可以使用XPath。具体的定义可以参看w3school。 首先应该了解一下XPath表达式:
表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
我们主要使用两个方法来查询XML文档,SelectNodes(xpath expression)和SelectSingleNode(xpath expression)。 SelectNodes返回一个XmlNodeList对象,也就是所有符合xpath表达式的xml节点都将会被返回,你需要对返回的结果进行遍历。 SelectSingleNode只返回第一个符合xpath表达式的节点,或者返回null。 以下面的XML文件为例,我们进行一些演示:
[u]复制代码[/u] 代码如下:
<?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); [b](三) 创建[/b] 以创建以下XML文档为例:
[u]复制代码[/u] 代码如下:
<?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>
[u]复制代码[/u] 代码如下:
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");
[b]总结:[/b] XmlDocument类是.Net API中提供的支持W3C XML DOM标准的类。可以用它来创建和查询XML文档。由于XmlDocument要将XML文档的内容全部装载进内存中,所以对于读取内容过大的XML文档,不适合使用XmlDocument类,而可以使用XmlReader来完成读取。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部