LINQ XML的基本操作

转自: http://blog.csdn.net/chinajiyong/article/details/7485019

这几天想写点基础的博客内容,正好最近在用XML,就写了一点XML的基本操作。

通过函数的形式表现出来。

  1. /*
  2. -------------------------------------
  3. Context:LINQTOXML
  4. -------------------------------------
  5. Author:Chinajiyong
  6. -------------------------------------
  7. DateTime:2012-04-21
  8. -------------------------------------
  9. 通过函数的形式表现出来
  10. -------------------------------------
  11. */
[csharp] view plain copy
  1. ///<summary>
  2. ///1、创建BookStore.xml的XML文件,由函数CreateXmlFile()完成
  3. ///</summary>
[csharp] view plain copy
  1. ///<paramname="xmlpath">XML文件的路径</param>
  2. privatestaticvoidCreateXmlFile(stringxmlpath)
  3. {
  4. XDocumentdoc=newXDocument(///创建XDocument类的实例
  5. newXDeclaration("1.0","utf-8","yes"),///XML的声明,包括版本,编码,xml文件是否独立
  6. newXElement("Books",///添加根节点
  7. newXElement("Book",///添加一个节点
  8. newXAttribute("BookID","001"),///添加属性BookID
  9. newXElement("BookNo","0001"),///添加元素BookNo
  10. newXElement("BookName","Book0001"),///添加元素BookName
  11. newXElement("BookPrice","40"),///添加元素BookPrice
  12. newXElement("BookRemark","Thisisabook0001")///添加元素BookRemark
  13. )
  14. )
  15. );
  16. ///保存XML文件到指定地址
  17. doc.Save(xmlpath);
  18. Console.WriteLine(doc);
  19. }
调用函数CreateXmlFile(string xmlpath)
[csharp] view plain copy
  1. staticvoidMain(string[]args)
  2. {
  3. ///创建一个名为BookStore.xml的xml文件
  4. Program.CreateXmlFile(@"C:\BookStore.xml");
  5. }

运行结果:


[csharp] view plain copy
  1. ///<summary>
  2. ///2、添加元素
  3. ///</summary>
  4. ///<paramname="xmlpath">XML文件的路径</param>
  5. privatestaticvoidAddXmlElement(stringxmlpath)
  6. {
  7. ///导入XML文件
  8. XElementxe=XElement.Load(xmlpath);
  9. ///创建一个新节点
  10. XElementbook1=newXElement("Book",
  11. newXAttribute("BookID","002"),
  12. newXElement("BookNo","0002"),
  13. newXElement("BookName","Book0002"),
  14. newXElement("BookPrice","50"),
  15. newXElement("BookRemark","Thisisabook0002")
  16. );
  17. ///添加节点到XML文件中,并保存
  18. xe.Add(book1);
  19. ///创建一个新节点
  20. XElementbook2=newXElement("Book","003"),"0003"),"Book0003"),"30"),"Thisisabook0003")
  21. );
  22. ///添加节点到XML文件中,并保存
  23. xe.Add(book2);
  24. ///创建一个新节点
  25. XElementbook3=newXElement("Book","004"),"0004"),"Book0004"),"60"),"Thisisabook0004")
  26. );
  27. ///添加节点到XML文件中
  28. xe.Add(book3);
  29. ///保存到XML文件中
  30. xe.Save(xmlpath);
  31. Console.WriteLine(xe);
  32. }
调用函数AddXmlElement(string xmlpath)

[csharp] view plain copy
  1. ///添加XML元素
  2. Program.AddXmlElement(@"C:\BookStore.xml");
运行结果:


[csharp] view plain copy
  1. ///<summary>
  2. ///3、修改XML文件的元素
  3. ///</summary>
  4. ///<paramname="xmlpath">XML文件的路径</param>
  5. ///<paramname="strElement">指定的修改元素</param>
  6. privatestaticvoidModifyXmlElement(stringxmlpath,stringstrElement)
  7. {
  8. XElementxe=XElement.Load(xmlpath);
  9. ///查询修改的元素
  10. IEnumerable<XElement>element=fromeinxe.Elements("Book")
  11. wheree.Attribute("BookID").Value==strElement
  12. selecte;
  13. ///修改元素
  14. if(element.Count()>0)
  15. {
  16. XElementfirstelement=element.First();
  17. ///设置新的属性
  18. firstelement.SetAttributeValue("BookID","new004");
  19. ///替换成新的节点
  20. firstelement.ReplaceNodes(
  21. newXElement("BookNo","new0004"),
  22. newXElement("BookName","Booknew0004"),
  23. newXElement("BookPrice","45"),
  24. newXElement("BookRemark","Thisisabooknew0004")
  25. );
  26. }
  27. xe.Save(xmlpath);
  28. Console.WriteLine(xe);
  29. }
调用函数ModifyXmlElement(string xmlpath,string strElement)
[csharp] view plain copy
  1. ///修改XML文件的元素
  2. Program.ModifyXmlElement(@"C:\BookStore.xml","004");

运行结果:

[csharp] view plain copy
  1. ///<summary>
  2. ///4、删除XML文件的元素
  3. ///</summary>
  4. ///<paramname="xmlpath">XML文件的路径</param>
  5. ///<paramname="strElement">指定删除元素</param>
  6. privatestaticvoidDeleteXmlElement(stringxmlpath,stringstrElement)
  7. {
  8. XElementxe=XElement.Load(xmlpath);
  9. ///查询修改的元素
  10. IEnumerable<XElement>element=fromeinxe.Elements("Book")
  11. wheree.Attribute("BookID").Value==strElement
  12. selecte;
  13. ///修改元素
  14. if(element.Count()>0)
  15. {
  16. XElementfirstelement=element.First();
  17. ///删除此元素的所有节点和属性
  18. firstelement.RemoveAll();
  19. ///删除此元素的属性
  20. //firstelement.RemoveAttributes();
  21. ///删除此元素的子节点
  22. //firstelement.RemoveNodes();
  23. }
  24. xe.Save(xmlpath);
  25. Console.WriteLine(xe);
  26. }
调用函数DeleteXmlElement(string xmlpath,string strElement)
[csharp] view plain copy
  1. ///删除XML元素
  2. Program.DeleteXmlElement(@"C:\BookStore.xml","new004");
运行结果:


[csharp] view plain copy
  1. ///<summary>
  2. ///5、将XML文件中的属性更换成元素
  3. ///</summary>
  4. ///<paramname="xmlpath">XML文件的路径</param>
  5. ///<paramname="strAttribute">指定要更换的属性</param>
  6. privatestaticvoidConvertAttributeToElement(stringxmlpath,stringstrAttribute)
  7. {
  8. XElementxe=XElement.Load(xmlpath);
  9. ///查询更换的元素
  10. IEnumerable<XElement>element=fromeinxe.Elements("Book")
  11. wheree.Attribute("BookID").Value==strAttribute
  12. selecte;
  13. ///更换为元素
  14. if(element.Count()>0)
  15. {
  16. XElementfirstelement=element.First();
  17. //获取第一个属性
  18. XAttributeattr=firstelement.FirstAttribute;
  19. //XAttributeattr=firstelement.Attribute("BookID");
  20. ///将属性转换成元素
  21. firstelement.AddFirst(
  22. newXElement(attr.Name,attr.Value)//添加BookID元素
  23. );
  24. ///删除属性
  25. firstelement.RemoveAttributes();
  26. }
  27. xe.Save(xmlpath);
  28. Console.WriteLine(xe);
  29. }
调用函数:ConvertAttributeToElement(string xmlpath,string strAttribute)
[csharp] view plain copy
  1. ///删除XML元素
  2. //Program.DeleteXmlElement(@"C:\BookStore.xml","new004");//注释这一样
  3. ///将文件中的属性更换成元素
  4. Program.ConvertAttributeToElement(@"C:\BookStore.xml","new004");

运行结果:


[csharp] view plain copy
  1. ///<summary>
  2. ///6、查询根元素
  3. ///</summary>
  4. ///<paramname="xmlpath">XML文件的路径</param>
  5. privatestaticvoidQueryRootElement(stringxmlpath)
  6. {
  7. XDocumentdoc=XDocument.Load(xmlpath);
  8. Console.WriteLine(doc.Root.Name);
  9. //IEnumerable<XElement>RootElement=fromrootindoc.Elements("Books")
  10. //selectroot;
  11. /////输出根元素
  12. //foreach(XElementxeinRootElement)
  13. //{
  14. //Console.WriteLine(xe.Name);
  15. //}
  16. }
[csharp] view plain copy
  1. <strong><spanstyle="font-size:18px;">调用函数:QueryRootElement(stringxmlpath)</span></strong>
[csharp] view plain copy
  1. <prename="code"class="csharp">///查询根元素
  2. Program.QueryRootElement(@"C:\BookStore.xml");</pre><strong><spanstyle="font-size:18px">运行结果:</span></strong><p></p>
  3. <pre></pre>
  4. <prename="code"class="csharp"style="background-color:rgb(255,255,255);">Books</pre><prename="code"class="csharp">///<summary>
  5. ///7、查询指定名称的元素
  6. ///</summary>
  7. ///<paramname="xmlpath">XML文件的路径</param>
  8. ///<paramname="strName">查询元素名称</param>
  9. privatestaticvoidQueryElementByName(stringxmlpath,stringstrName)
  10. {
  11. XElementxe=XElement.Load(xmlpath);
  12. ///查询元素
  13. varelements=xe.Elements("Book")
  14. .Where(e=>(string)e.Element("BookName")==strName)
  15. .OrderBy(e=>e.Element("BookName"))
  16. .ToList();
  17. elements.ForEach(e=>Console.WriteLine(e));
  18. }</pre><strong><spanstyle="font-size:18px">调用函数:QueryElementByName(stringxmlpath,stringstrName)</span></strong><br>
  19. <br>
  20. <prename="code"class="csharp">///查询指定名称的元素
  21. Program.QueryElementByName(@"C:\BookStore.xml","Book0003");</pre><strong><spanstyle="font-size:18px">运行结果:</span></strong>
  22. <p></p>
  23. <p><imgsrc="http://my.csdn.net/uploads/201204/21/1335011713_3231.png"alt=""><br>
  24. <br>
  25. </p><prename="code"class="csharp">///<summary>
  26. ///8、查询指定属性的元素
  27. ///</summary>
  28. ///<paramname="xmlpath">XML文件的路径</param>
  29. ///<paramname="strName">指定的属性</param>
  30. privatestaticvoidQueryElementByAttribute(stringxmlpath,stringstrAttribute)
  31. {
  32. XElementxe=XElement.Load(xmlpath);
  33. ///查询元素
  34. vareAttribute=xe.Elements("Book")
  35. .Where(e=>(string)e.Attribute("BookID")==strAttribute)
  36. .OrderBy(e=>e.Element("BookID"))
  37. .ToList();
  38. eAttribute.ForEach(e=>Console.WriteLine(e));
  39. }</pre><strong><spanstyle="font-size:18px">调用函数:QueryElementByAttribute(stringxmlpath,stringstrAttribute)</span></strong><br>
  40. <prename="code"class="csharp">///查询指定属性的元素
  41. Program.QueryElementByAttribute(@"C:\BookStore.xml","003");</pre><spanstyle="font-size:18px"><strong>运行结果:</strong></span><p></p>
  42. <p><imgsrc="http://my.csdn.net/uploads/201204/21/1335011840_7341.png"alt=""><br>
  43. </p><prename="code"class="csharp">///<summary>
  44. ///9、查询指定元素的子元素
  45. ///</summary>
  46. ///<paramname="xmlpath">XML文件的路径</param>
  47. ///<paramname="strSubElement">指定元素</param>
  48. privatestaticvoidQuerySubElement(stringxmlpath,stringstrSubElement)
  49. {
  50. XElementxe=XElement.Load(xmlpath);
  51. varelements=xe.Elements("Book")
  52. .Descendants("BookRemark")
  53. .ToList();
  54. foreach(vareinelements)
  55. {
  56. Console.WriteLine(e.Name.LocalName+"\t"+e.Value);
  57. }
  58. }</pre><strong><spanstyle="font-size:18px">调用函数:QuerySubElement(stringxmlpath,stringstrSubElement)</span></strong><p></p>
  59. <p></p><prename="code"class="csharp">///查询指定元素的子元素
  60. Program.QuerySubElement(@"C:\BookStore.xml","BookRemark");</pre><spanstyle="font-size:18px"><strong>运行结果:</strong></span><p></p>
  61. <p><imgsrc="http://my.csdn.net/uploads/201204/21/1335011970_6889.png"alt=""></p>
  62. <p></p><prename="code"class="csharp">///<summary>
  63. ///10、查询元素并排序
  64. ///</summary>
  65. ///<paramname="xmlpath">XML文件的路径</param>
  66. privatestaticvoidQueryElementByOrder(stringxmlpath)
  67. {
  68. XElementxe=XElement.Load(xmlpath);
  69. varelements=xe.Elements("Book")
  70. .Where(e=>Convert.ToInt32(e.Attribute("BookID").Value.Substring(e.Attribute("BookID").Value.Length-1,1))>1)
  71. .OrderByDescending(e=>(string)e.Element("BookName"))
  72. .ToList();
  73. elements.ForEach(e=>Console.WriteLine(e.Element("BookName").Value));
  74. }</pre><strong><spanstyle="font-size:18px">调用函数:QueryElementByOrder(stringxmlpath)</span></strong><br>
  75. <prename="code"class="csharp">///查询元素并排序
  76. Program.QueryElementByOrder(@"C:\BookStore.xml");</pre><spanstyle="font-size:18px"><strong>运行结果:</strong></span><p></p>
  77. <p><imgsrc="http://my.csdn.net/uploads/201204/21/1335012340_2136.png"alt=""><br>
  78. </p><prename="code"class="csharp">///<summary>
  79. ///11、查询元素并计算Price平均值
  80. ///</summary>
  81. ///<paramname="xmlpath">XML文件的路径</param>
  82. privatestaticvoidQueryElementByCoeompute(stringxmlpath)
  83. {
  84. XElementxe=XElement.Load(xmlpath);
  85. varelements=xe.Elements("Book")
  86. .Where(e=>Convert.ToInt32(e.Attribute("BookID").Value.Substring(e.Attribute("BookID").Value.Length-1,1))>1)
  87. .OrderByDescending(e=>(string)e.Element("BookName"))
  88. .ToList();
  89. Console.WriteLine("Average:"+elements.Average(e=>Convert.ToInt32(e.Element("BookPrice").Value)));
  90. }</pre><strong><spanstyle="font-size:18px">调用函数:QueryElementByCoeompute(stringxmlpath)</span></strong><br>
  91. <prename="code"class="csharp">///查询元素并计算Price平均值
  92. Program.QueryElementByCoeompute(@"C:\BookStore.xml");</pre><strong><spanstyle="font-size:18px">运行结果:</span></strong><p></p>
  93. <p><imgsrc="http://my.csdn.net/uploads/201204/21/1335012463_5700.png"alt=""><br>
  94. <br>
  95. </p>
  96. <p><spanstyle="font-size:18px">到此为止全部操作已经完成。整个操作仍然很简单。</span></p>

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念