使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例(转载)

    技术2025-02-09  19

     

    在.NET中使用DataSet来获取XML数据与保存XML数据很简单,很好用,不过有一些复杂点的XML结构,使用DataSet来操作就没有XmlDocument来操作这么好用了,所以本文在C#使用XmlDocument来操作XML的查询、增加、修改、删除、保存的基本操作。

    下面看实例:

    XML文件:books.xml 1<?xml version="1.0" encoding="UTF-8"?> 2<books> 3 <book>  //这里没有id 下面代码会增加 4  <name>哈里波特</name> 5  <price>10</price> 6  <memo>这是一本很好看的书。</memo> 7 </book> 8 <book id="B02"> 9  <name>三国演义</name>10  <price>10</price>11  <memo>四大名著之一。</memo>12 </book>13 <book id="B03">14  <name>水浒</name>15  <price>6</price>16  <memo>四大名著之一。</memo>17 </book>18 <book id="B04">19  <name>红楼</name>20  <price>5</price>21  <memo>四大名著之一。</memo>22 </book>23</books>  

    下面是C#代码:1eusing System; 2using System.Collections.Generic; 3using System.Text; 4using System.Xml; 5 6namespace TestXml 7   { 8    class Program 9       {10        static void Main(string[] args)11           {

    // XML表示Dom结构中的元素.XmlElement类的constructor 是protected,所以要通过XmlDocument().createElement()来实例化.12            XmlElement theBook = null, theElem = null, root = null;13            XmlDocument xmldoc = new XmlDocument();14            try15               {16                xmldoc.Load("Books.xml");17                root = xmldoc.DocumentElement; // DocumentElement 获取xml文档对象的根XmlElement.1819                //---  新建一本书开始 ----20                theBook = xmldoc.CreateElement("book");21                theElem = xmldoc.CreateElement("name");22                theElem.InnerText = "新书";23                theBook.AppendChild(theElem); //添加指定的节点的子节点列表的末尾.2425                theElem = xmldoc.CreateElement("price");

    26                theElem.InnerText = "20";  // innerText: 所有子节点值的串联字符串.27                theBook.AppendChild(theElem);2829                theElem = xmldoc.CreateElement("memo");30                theElem.InnerText = "新书更好看。";31                theBook.AppendChild(theElem);32                root.AppendChild(theBook);33                Console.Out.WriteLine("---  新建一本书开始 ----");34                Console.Out.WriteLine(root.OuterXml); //节点自身及其所以子节点的xml字符串.35                //---  新建一本书完成 ----3637                //---  下面对《哈里波特》做一些修改。 ----38                //---  查询找《哈里波特》----39                theBook = (XmlElement)root.SelectSingleNode("/books/book[name=''哈里波特'']");  //selectSingleNode 根据XPath表达式,获得符合条件的第一个节点.40                Console.Out.WriteLine("---  查找《哈里波特》 ----");41                Console.Out.WriteLine(theBook.OuterXml);42                //---  此时修改这本书的价格 -----43                theBook.GetElementsByTagName("price").Item(0).InnerText = "15";//getElementsByTagName返回的是NodeList,所以要跟上item(0)44                Console.Out.WriteLine("---  此时修改这本书的价格 ----");45                Console.Out.WriteLine(theBook.OuterXml);46                //---  另外还想加一个属性id,值为B01 ----47                theBook.SetAttribute("id", "B01");48                Console.Out.WriteLine("---  另外还想加一个属性id,值为B01 ----");49                Console.Out.WriteLine(theBook.OuterXml);50                //---  对《哈里波特》修改完成。 ----5152                //---  要用id属性删除----53                theBook = (XmlElement)root.SelectSingleNode("/books/book[@id=''B02'']");54                Console.Out.WriteLine("---  要用id属性删除《三国演义》这本书 ----");55                Console.Out.WriteLine(theBook.OuterXml);56                theBook.ParentNode.RemoveChild(theBook);57                Console.Out.WriteLine("---  删除后的XML ----");58                Console.Out.WriteLine(xmldoc.OuterXml);5960                //---  再将所有价格低于10的书删除  ----61                XmlNodeList someBooks = root.SelectNodes("/books/book[price<10]");62                Console.Out.WriteLine("---  再将所有价格低于10的书删除  ---");63                Console.Out.WriteLine("---  符合条件的书有 "   someBooks.Count   "本。  ---");6465                for (int i = 0; i < someBooks.Count; i ++ )66                {67                    someBooks.Item(i).ParentNode.RemoveChild(someBooks.Item(i));68                }69                Console.Out.WriteLine("---  删除后的XML ----");70                Console.Out.WriteLine(xmldoc.OuterXml);7172                xmldoc.Save("books.xml");//保存到books.xml7374                Console.In.Read();75            }76            catch (Exception e)77            {78                Console.Out.WriteLine(e.Message);79            }80        }81    }82}上面C#代码都有注释,很简单就看明白了。

    最新回复(0)