LINQ XML的基本操作

来源:互联网 发布:一键安装php集成环境 编辑:程序博客网 时间:2024/06/04 20:02

        LINQ XML的基本操作       

        分类:            LINQ467人阅读评论(5)收藏举报

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

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

[html] view plaincopyprint?
  1. /*  
  2.    -------------------------------------  
  3.       Context:LINQ TO  XML  
  4.    -------------------------------------  
  5.        Author:Chinajiyong  
  6.    -------------------------------------  
  7.        DateTime:2012-04-21 
  8.    -------------------------------------  
  9.        通过函数的形式表现出来 
  10.    -------------------------------------  
  11. */ 
[csharp] view plaincopyprint?
  1. /// <summary> 
  2. /// 1、创建BookStore.xml的XML文件,由函数CreateXmlFile()完成 
  3. /// </summary> 
[csharp] view plaincopyprint?
  1. /// <param name="xmlpath">XML文件的路径</param> 
  2. private staticvoid CreateXmlFile(string xmlpath) 
  3.     XDocument doc = new XDocument(             ///创建XDocument类的实例 
  4.         new XDeclaration("1.0","utf-8", "yes"),///XML的声明,包括版本,编码,xml文件是否独立 
  5.         new XElement("Books",                  ///添加根节点 
  6.             new XElement("Book",               ///添加一个节点 
  7.                 new XAttribute("BookID","001"),///添加属性BookID 
  8.                 new XElement("BookNo","0001"), ///添加元素BookNo 
  9.                 new XElement("BookName","Book 0001"),///添加元素BookName 
  10.                 new XElement("BookPrice","40"),///添加元素BookPrice 
  11.                 new XElement("BookRemark","This is a book 0001")///添加元素BookRemark 
  12.                          ) 
  13.                      ) 
  14.         ); 
  15.     ///保存XML文件到指定地址 
  16.     doc.Save(xmlpath); 
  17.     Console.WriteLine(doc); 
调用函数CreateXmlFile(string xmlpath)
[csharp] view plaincopyprint?
  1. static void Main(string[] args) 
  2.        { 
  3.            ///创建一个名为BookStore.xml的xml文件 
  4.            Program.CreateXmlFile(@"C:\BookStore.xml"); 
  5.         } 

运行结果:


[csharp] view plaincopyprint?
  1. /// <summary> 
  2. /// 2、添加元素 
  3. /// </summary> 
  4. /// <param name="xmlpath">XML文件的路径</param> 
  5. private staticvoid AddXmlElement(string xmlpath) 
  6.     ///导入XML文件 
  7.     XElement xe = XElement.Load(xmlpath); 
  8.     ///创建一个新节点 
  9.     XElement book1 = new XElement("Book"
  10.                        new XAttribute("BookID","002"), 
  11.                        new XElement("BookNo","0002"), 
  12.                        new XElement("BookName","Book 0002"), 
  13.                        new XElement("BookPrice","50"), 
  14.                        new XElement("BookRemark","This is a book 0002"
  15.         ); 
  16.     ///添加节点到XML文件中,并保存 
  17.     xe.Add(book1); 
  18.     ///创建一个新节点 
  19.     XElement book2 = new XElement("Book"
  20.                        new XAttribute("BookID","003"), 
  21.                        new XElement("BookNo","0003"), 
  22.                        new XElement("BookName","Book 0003"), 
  23.                        new XElement("BookPrice","30"), 
  24.                        new XElement("BookRemark","This is a book 0003"
  25.         ); 
  26.     ///添加节点到XML文件中,并保存 
  27.     xe.Add(book2); 
  28.     ///创建一个新节点 
  29.     XElement book3 = new XElement("Book"
  30.                        new XAttribute("BookID","004"), 
  31.                        new XElement("BookNo","0004"), 
  32.                        new XElement("BookName","Book 0004"), 
  33.                        new XElement("BookPrice","60"), 
  34.                        new XElement("BookRemark","This is a book 0004"
  35.         ); 
  36.     ///添加节点到XML文件中 
  37.     xe.Add(book3); 
  38.     ///保存到XML文件中 
  39.     xe.Save(xmlpath); 
  40.  
  41.     Console.WriteLine(xe); 
调用函数AddXmlElement(string xmlpath)

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


[csharp] view plaincopyprint?
  1. /// <summary> 
  2. ///  3、修改XML文件的元素 
  3. /// </summary> 
  4. /// <param name="xmlpath">XML文件的路径</param> 
  5. /// <param name="strElement">指定的修改元素</param> 
  6. private staticvoid ModifyXmlElement(string xmlpath,string strElement) 
  7.     XElement xe = XElement.Load(xmlpath); 
  8.     ///查询修改的元素 
  9.     IEnumerable<XElement> element = from e in xe.Elements("Book"
  10.                                     where e.Attribute("BookID").Value == strElement 
  11.                                     select e; 
  12.     ///修改元素 
  13.     if (element.Count() > 0) 
  14.     { 
  15.         XElement firstelement = element.First(); 
  16.         ///设置新的属性 
  17.         firstelement.SetAttributeValue("BookID","new004"); 
  18.         ///替换成新的节点 
  19.         firstelement.ReplaceNodes( 
  20.                 new XElement("BookNo","new0004"), 
  21.                 new XElement("BookName","Book new0004"), 
  22.                 new XElement("BookPrice","45"), 
  23.                 new XElement("BookRemark","This is a book new0004"
  24.             ); 
  25.     } 
  26.     xe.Save(xmlpath); 
  27.     Console.WriteLine(xe); 
调用函数ModifyXmlElement(string xmlpath, string strElement)

[csharp] view plaincopyprint?
  1. ///修改XML文件的元素 
  2. Program.ModifyXmlElement(@"C:\BookStore.xml","004"); 

运行结果:

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


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

运行结果:


[csharp] view plaincopyprint?
  1. /// <summary> 
  2. /// 6、查询根元素 
  3. /// </summary> 
  4. /// <param name="xmlpath">XML文件的路径</param> 
  5. private staticvoid QueryRootElement(string xmlpath) 
  6.     XDocument doc = XDocument.Load(xmlpath); 
  7.     Console.WriteLine(doc.Root.Name); 
  8.     //IEnumerable<XElement> RootElement = from root in doc.Elements("Books") 
  9.     //                                    select root; 
  10.     /////输出根元素 
  11.     //foreach (XElement xe in RootElement) 
  12.     //{ 
  13.     //    Console.WriteLine(xe.Name); 
  14.     //} 
[csharp] view plaincopyprint?
  1. <strong><span style="font-size: 18px;">调用函数:QueryRootElement(string xmlpath)</span></strong> 
[csharp] view plaincopyprint?
  1. <pre class="csharp" name="code">           /// 查询根元素 
  2.             Program.QueryRootElement(@"C:\BookStore.xml");</pre><strong><span style="font-size: 18px;">运行结果:</span></strong><p></p> 
  3. <pre></pre> 
  4. <pre style="background-color: rgb(255, 255, 255);"class="csharp" name="code">Books</pre><preclass="csharp" name="code">       /// <summary> 
  5.         /// 7、查询指定名称的元素 
  6.         /// </summary> 
  7.         /// <param name="xmlpath">XML文件的路径</param> 
  8.         /// <param name="strName">查询元素名称</param> 
  9.         private staticvoid QueryElementByName(string xmlpath,string strName) 
  10.         { 
  11.             XElement xe = XElement.Load(xmlpath); 
  12.             ///查询元素 
  13.             var elements = 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><span style="font-size: 18px;">调用函数:QueryElementByName(string xmlpath,string strName)</span></strong><br> 
  19. <br> 
  20. <pre class="csharp" name="code">           ///查询指定名称的元素 
  21.             Program.QueryElementByName(@"C:\BookStore.xml","Book 0003");</pre><strong><span style="font-size: 18px;">运行结果:</span></strong> 
  22. <p></p> 
  23. <p><img alt="" src="http://my.csdn.net/uploads/201204/21/1335011713_3231.png"><br> 
  24. <br> 
  25. <pre class="csharp" name="code">       /// <summary> 
  26.         /// 8、查询指定属性的元素 
  27.         /// </summary> 
  28.         /// <param name="xmlpath">XML文件的路径</param> 
  29.         /// <param name="strName">指定的属性</param> 
  30.         private staticvoid QueryElementByAttribute(string xmlpath,string strAttribute) 
  31.         { 
  32.             XElement xe = XElement.Load(xmlpath); 
  33.             ///查询元素 
  34.             var eAttribute = 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><span style="font-size: 18px;">调用函数:QueryElementByAttribute(string xmlpath,string strAttribute)</span></strong><br> 
  40. <pre class="csharp" name="code">           ///查询指定属性的元素 
  41.             Program.QueryElementByAttribute(@"C:\BookStore.xml","003");</pre><span style="font-size: 18px;"><strong>运行结果:</strong></span><p></p> 
  42. <p><img alt="" src="http://my.csdn.net/uploads/201204/21/1335011840_7341.png"><br> 
  43. <pre class="csharp" name="code">       /// <summary> 
  44.         /// 9、查询指定元素的子元素 
  45.         /// </summary> 
  46.         /// <param name="xmlpath">XML文件的路径</param> 
  47.         /// <param name="strSubElement">指定元素</param> 
  48.         private staticvoid QuerySubElement(string xmlpath,string strSubElement) 
  49.         { 
  50.             XElement xe = XElement.Load(xmlpath); 
  51.             var elements = xe.Elements("Book"
  52.                          .Descendants("BookRemark"
  53.                          .ToList(); 
  54.             foreach (var e in elements) 
  55.             { 
  56.                 Console.WriteLine(e.Name.LocalName + "\t" + e.Value); 
  57.             } 
  58.         }</pre><strong><span style="font-size: 18px;">调用函数:QuerySubElement(string xmlpath,string strSubElement)</span></strong><p></p> 
  59. <p><pre class="csharp" name="code">           ///查询指定元素的子元素 
  60.             Program.QuerySubElement(@"C:\BookStore.xml","BookRemark");</pre><span style="font-size: 18px;"><strong>运行结果:</strong></span><p></p> 
  61. <p><img alt="" src="http://my.csdn.net/uploads/201204/21/1335011970_6889.png"></p> 
  62. <p><pre class="csharp" name="code">       /// <summary> 
  63.         /// 10、查询元素并排序 
  64.         /// </summary> 
  65.         /// <param name="xmlpath">XML文件的路径</param> 
  66.         private staticvoid QueryElementByOrder(string xmlpath) 
  67.         { 
  68.             XElement xe = XElement.Load(xmlpath); 
  69.             var elements = 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><span style="font-size: 18px;">调用函数:QueryElementByOrder(string xmlpath)</span></strong><br> 
  75. <pre class="csharp" name="code">           /// 查询元素并排序 
  76.             Program.QueryElementByOrder(@"C:\BookStore.xml");</pre><span style="font-size: 18px;"><strong>运行结果:</strong></span><p></p> 
  77. <p><img alt="" src="http://my.csdn.net/uploads/201204/21/1335012340_2136.png"><br> 
  78. <pre class="csharp" name="code">       /// <summary> 
  79.         /// 11、查询元素并计算Price平均值 
  80.         /// </summary> 
  81.         /// <param name="xmlpath">XML文件的路径</param> 
  82.         private staticvoid QueryElementByCoeompute(string xmlpath) 
  83.         { 
  84.             XElement xe = XElement.Load(xmlpath); 
  85.             var elements = 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><span style="font-size: 18px;">调用函数:QueryElementByCoeompute(string xmlpath)</span></strong><br> 
  91. <pre class="csharp" name="code">           /// 查询元素并计算Price平均值 
  92.             Program.QueryElementByCoeompute(@"C:\BookStore.xml");</pre><strong><span style="font-size: 18px;">运行结果:</span></strong><p></p> 
  93. <p><img alt="" src="http://my.csdn.net/uploads/201204/21/1335012463_5700.png"><br> 
  94. <br> 
  95. </p> 
  96. <p><span style="font-size: 18px;">到此为止全部操作已经完成。整个操作仍然很简单。</span></p>