LINQ XML的基本操作

来源:互联网 发布:linux openoffice日志 编辑:程序博客网 时间:2024/06/06 17:36

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

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

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

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

运行结果:


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

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


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

运行结果:

[csharp] view plaincopy
  1. /// <summary>  
  2. /// 4、删除XML文件的元素  
  3. /// </summary>  
  4. /// <param name="xmlpath">XML文件的路径</param>  
  5. /// <param name="strElement">指定删除元素</param>  
  6. private static void DeleteXmlElement(string xmlpath, string strElement)  
  7. {  
  8.     XElement xe = XElement.Load(xmlpath);  
  9.     ///查询修改的元素  
  10.     IEnumerable<XElement> element = from e in xe.Elements("Book")  
  11.                                     where e.Attribute("BookID").Value == strElement  
  12.                                     select e;  
  13.     ///修改元素  
  14.     if (element.Count() > 0)  
  15.     {  
  16.         XElement firstelement = 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 plaincopy
  1. ///删除XML元素  
  2. Program.DeleteXmlElement(@"C:\BookStore.xml","new004");  
运行结果:


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

运行结果:


[csharp] view plaincopy
  1. /// <summary>  
  2. /// 6、查询根元素  
  3. /// </summary>  
  4. /// <param name="xmlpath">XML文件的路径</param>  
  5. private static void QueryRootElement(string xmlpath)  
  6. {  
  7.     XDocument doc = XDocument.Load(xmlpath);  
  8.     Console.WriteLine(doc.Root.Name);  
  9.     //IEnumerable<XElement> RootElement = from root in doc.Elements("Books")  
  10.     //                                    select root;  
  11.     /////输出根元素  
  12.     //foreach (XElement xe in RootElement)  
  13.     //{  
  14.     //    Console.WriteLine(xe.Name);  
  15.     //}  
  16. }  
[csharp] view plaincopy
  1. <strong><span style="font-size:18px;">调用函数:QueryRootElement(string xmlpath)</span></strong>  
[csharp] view plaincopy
  1. <pre name="code" class="csharp">            /// 查询根元素  
  2.             Program.QueryRootElement(@"C:\BookStore.xml");</pre><strong><span style="font-size:18px">运行结果:</span></strong><p></p>  
  3. <pre></pre>  
  4. <pre name="code" class="csharp" style="background-color: rgb(255, 255, 255); ">Books</pre><pre name="code" class="csharp">        /// <summary>  
  5.         /// 7、查询指定名称的元素  
  6.         /// </summary>  
  7.         /// <param name="xmlpath">XML文件的路径</param>  
  8.         /// <param name="strName">查询元素名称</param>  
  9.         private static void 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 name="code" class="csharp">            ///查询指定名称的元素  
  21.             Program.QueryElementByName(@"C:\BookStore.xml""Book 0003");</pre><strong><span style="font-size:18px">运行结果:</span></strong>  
  22. <p></p>  
  23. <p><img src="http://my.csdn.net/uploads/201204/21/1335011713_3231.png" alt=""><br>  
  24. <br>  
  25. </p><pre name="code" class="csharp">        /// <summary>  
  26.         /// 8、查询指定属性的元素  
  27.         /// </summary>  
  28.         /// <param name="xmlpath">XML文件的路径</param>  
  29.         /// <param name="strName">指定的属性</param>  
  30.         private static void 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 name="code" class="csharp">            ///查询指定属性的元素  
  41.             Program.QueryElementByAttribute(@"C:\BookStore.xml""003");</pre><span style="font-size:18px"><strong>运行结果:</strong></span><p></p>  
  42. <p><img src="http://my.csdn.net/uploads/201204/21/1335011840_7341.png" alt=""><br>  
  43. </p><pre name="code" class="csharp">        /// <summary>  
  44.         /// 9、查询指定元素的子元素  
  45.         /// </summary>  
  46.         /// <param name="xmlpath">XML文件的路径</param>  
  47.         /// <param name="strSubElement">指定元素</param>  
  48.         private static void 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></p><pre name="code" class="csharp">            ///查询指定元素的子元素  
  60.             Program.QuerySubElement(@"C:\BookStore.xml""BookRemark");</pre><span style="font-size:18px"><strong>运行结果:</strong></span><p></p>  
  61. <p><img src="http://my.csdn.net/uploads/201204/21/1335011970_6889.png" alt=""></p>  
  62. <p></p><pre name="code" class="csharp">        /// <summary>  
  63.         /// 10、查询元素并排序  
  64.         /// </summary>  
  65.         /// <param name="xmlpath">XML文件的路径</param>  
  66.         private static void 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 name="code" class="csharp">            /// 查询元素并排序  
  76.             Program.QueryElementByOrder(@"C:\BookStore.xml");</pre><span style="font-size:18px"><strong>运行结果:</strong></span><p></p>  
  77. <p><img src="http://my.csdn.net/uploads/201204/21/1335012340_2136.png" alt=""><br>  
  78. </p><pre name="code" class="csharp">        /// <summary>  
  79.         /// 11、查询元素并计算Price平均值  
  80.         /// </summary>  
  81.         /// <param name="xmlpath">XML文件的路径</param>  
  82.         private static void 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 name="code" class="csharp">            /// 查询元素并计算Price平均值  
  92.             Program.QueryElementByCoeompute(@"C:\BookStore.xml");</pre><strong><span style="font-size:18px">运行结果:</span></strong><p></p>  
  93. <p><img src="http://my.csdn.net/uploads/201204/21/1335012463_5700.png" alt=""><br>  
  94. <br>  
  95. </p>  
  96. <p><span style="font-size:18px">到此为止全部操作已经完成。整个操作仍然很简单。</span></p> 
0 0
原创粉丝点击