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

这几天想写点基础的博客内容,正好最近在用XML,就写了一点XML的基本操作。 通过函数的形式表现出来。

 

  1. /*   
  2.    -------------------------------------   
  3.       Context:LINQ TO  XML   
  4.    -------------------------------------   
  5.        Author:Chinajiyong   
  6.    -------------------------------------   
  7.        DateTime:2012-04-21  
  8.    -------------------------------------   
  9.        通过函数的形式表现出来  
  10.    -------------------------------------   
  11. */  
  1. /// <summary>  
  2. /// 1、创建BookStore.xml的XML文件,由函数CreateXmlFile()完成  
  3. /// </summary>  
  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)

  1. static void Main(string[] args)  
  2.        {  
  3.            ///创建一个名为BookStore.xml的xml文件  
  4.            Program.CreateXmlFile(@"C:\BookStore.xml");  
  5.         }  


运行结果:


  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)

 

  1. ///添加XML元素  
  2. Program.AddXmlElement(@"C:\BookStore.xml");  

运行结果:


  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)

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

运行结果:

  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)

  1. ///删除XML元素  
  2. Program.DeleteXmlElement(@"C:\BookStore.xml","new004");  

运行结果:


  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)

  1. ///删除XML元素  
  2. //Program.DeleteXmlElement(@"C:\BookStore.xml","new004");//注释这一样  
  3.   
  4. ///将文件中的属性更换成元素  
  5. Program.ConvertAttributeToElement(@"C:\BookStore.xml","new004");  


运行结果:


  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. }  
  1. <strong><span style="font-size:18px;">调用函数:QueryRootElement(string xmlpath)</span></strong>  
    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> 
posted on 2015-06-25 16:17  踏歌&而行  阅读(209)  评论(0编辑  收藏  举报