time 
设为首页】【收藏本站

白小姐透码: 白小姐彩图

当前位置: 白小姐彩图 > 程序设计 > .net > C# > C#加载和查询XML的XmlDocument类使用实例

C#加载和查询XML的XmlDocument类使用实例

时间:2012-11-19 23:10 点击:4781次 字体:[ ]




白小姐彩图 www.5vq5o.cn  W3C制定了XML DOM标准。很多编程语言中多提供了支持W3C XML DOM标准的API。我在之前的文章中介绍过Javascript加载和查询XML实例。在本文中,我来介绍一下.Net中的XmlDocument类。它支持并扩展了W3C XML DOM标准。它将整个XML文档都先装载进内存中,然后再对XML文档进行操作,所以如果XML文档内容过大,不建议使用XmlDocument类,因为会消耗过多内存。对于很大的XML文档,可以使用XmlReader类来读取。因为XmlReader使用Steam(流)来读取文件,所以不会对内存造成太大的消耗。下面就来看一下如何使用XmlDocument类。

 

(一) 加载

加载XML比较常用的有三种方法:

 

  1. public virtual void Load(string filename); 
  2.  
  3. public virtual void Load(Stream inStream); 
  4.  
  5. public virtual void LoadXml(string xml); 

下面代码演示如何使用它们:

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

 

(二) 查询

对XML的元素、属性、文本的查询可以使用XPath。具体的定义可以参看w3school。

首先应该了解一下XPath表达式:

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

 

 

 

 

 

 

 

我们主要使用两个方法来查询XML文档,SelectNodes(xpath expression)和SelectSingleNode(xpath expression)。

SelectNodes返回一个XmlNodeList对象,也就是所有符合xpath表达式的xml节点都将会被返回,你需要对返回的结果进行遍历。

SelectSingleNode只返回第一个符合xpath表达式的节点,或者返回null。

以下面的XML文件为例,我们进行一些演示:

 

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

 

1. 返回所有Contact节点:  

 

  1. XmlNodeList nodelist = xmlDoc.SelectNodes("/Customers/Customer/Contact");  
  2. foreach (XmlNode node in nodelist)  
  3. {  
  4.     Console.WriteLine(node.OuterXml);  
  5. }  

 

输出结果为:

<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文档为例:

 

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

 

 

  1. var xmlDoc = new XmlDocument();  
  2. //Create the xml declaration first  
  3. xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0""utf-8"null)); 
  4.  
  5. //Create the root node and append into doc  
  6. var el = xmlDoc.CreateElement("Customers");  
  7. xmlDoc.AppendChild(el); 
  8.  
  9. // Customer Lenovo  
  10. XmlElement elementCustomer = xmlDoc.CreateElement("Customer"); 
  11.  
  12. XmlAttribute attrID = xmlDoc.CreateAttribute("id");  
  13. attrID.Value = "01";  
  14. elementCustomer.Attributes.Append(attrID); 
  15.  
  16. XmlAttribute cityID = xmlDoc.CreateAttribute("city");  
  17. cityID.Value = "Beijing";  
  18. elementCustomer.Attributes.Append(cityID); 
  19.  
  20. XmlAttribute attrCountry = xmlDoc.CreateAttribute("country");  
  21. attrCountry.Value = "China";  
  22. elementCustomer.Attributes.Append(attrCountry); 
  23.  
  24. XmlAttribute nameCountry = xmlDoc.CreateAttribute("name");  
  25. nameCountry.Value = "Lenovo";  
  26. elementCustomer.Attributes.Append(nameCountry); 
  27.  
  28. el.AppendChild(elementCustomer); 
  29.  
  30. // Contact Li Li  
  31. XmlElement elementContact = xmlDoc.CreateElement("Contact");  
  32. elementContact.InnerText = "Li Li"
  33.  
  34. XmlAttribute attrGender = xmlDoc.CreateAttribute("gender");  
  35. attrGender.Value = "female";  
  36. elementContact.Attributes.Append(attrGender); 
  37.  
  38. XmlAttribute titleGender = xmlDoc.CreateAttribute("title");  
  39. titleGender.Value = "Support";  
  40. elementContact.Attributes.Append(titleGender); 
  41.  
  42. elementCustomer.AppendChild(elementContact); 
  43.  
  44. xmlDoc.Save("test.xml"); 

总结: XmlDocument类是.Net API中提供的支持W3C XML DOM标准的类??梢杂盟创唇ê筒檠疿ML文档。由于XmlDocument要将XML文档的内容全部装载进内存中,所以对于读取内容过大的XML文档,不适合使用XmlDocument类,而可以使用XmlReader来完成读取。



本文地址 : //www.5vq5o.cn/plus/view-210328-1.html
标签: 查询 XML 加载 C# 使用实例 XmlDocument
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:

  • 没能过准丈母娘这关 问题竟出在发际线 2019-05-21
  • 溜溜溜!10位外国驻华大使中文拜年视频合集来啦 2019-05-21
  • “生态+康养” 冰雪康养小镇项目落户沽源 2019-05-14
  • 您要明白的是,如果按照上海市的人口基数2500万计算的话,就算有100万的服务人员,平均每人也要保障25个人的预约服务.人要理性 2019-04-06
  • 回复@海之宁:你的卡点就在于不知道分配既涉及消费资料有涉及生产资料。 2019-04-06
  • 赵雅芝联合“我·爱我 女性健康工程”为乳腺健康共发声 2019-04-03
  • 合肥市庐阳中学启动“教师成长工程” 2019-04-01
  • 中年不发福!51岁景岗山紧身衣秀健硕身材 2019-04-01
  • 炒房炒房,炒了北京炒西安,炒了天堂炒人间,何时休?限价现价叫人害怕。 2019-03-27
  • “5·15”全国公安机关打击和防范经济犯罪宣传日 2019-03-27
  • 穿拖鞋开车酿成追尾事故 2019-03-20
  • 重庆市永川区:“1+8+X”模式探索基层人民调解新路子 2019-03-20
  • 巢湖市第三届少儿器乐比赛圆满落幕 2019-02-15
  • Valentino 2017秋冬高级定制大秀 2018-09-08
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2018-07-14
  • 536| 223| 437| 818| 124| 750| 708| 136| 834| 692|