使用C#对XML进行增删改查操作

xml文件格式

<?xml version="1.0" encoding="utf-8"?>  
<messageList>  
  <message id="1">  
    <Name>熊猫</Name>  
    <QQ>123456</QQ>  
    <Email>panda@qq.com</Email>  
    <Content>asfdsafasdfasdfsad我是内容</Content>  
    <Time>2009-10-1</Time>  
  </message>  
</messageList>  

1.添加

XmlDocument xmld = new XmlDocument();   
                xmld.Load(Server.MapPath("App_Code/Message.xml"));//加载xml文件    
                XmlNode root = xmld.SelectSingleNode("messageList");//查找messageList节点   
  
                int i = xmld.SelectSingleNode("messageList").ChildNodes.Count + 1;   
                XmlElement xml0 = xmld.CreateElement("message");   
                xml0.SetAttribute("id", i.ToString());   
  
                XmlElement xml1 = xmld.CreateElement("Name");//创建一个Name节点   
                xml1.InnerText = this.txtName.Value.Trim();   
                xml0.AppendChild(xml1);//添加   
  
                XmlElement xml2 = xmld.CreateElement("QQ");//创建QQ节点   
                xml2.InnerText = this.txtQQ.Value.Trim();   
                xml0.AppendChild(xml2);//添加   
  
                XmlElement xml3 = xmld.CreateElement("Email");//创建一个Email节点   
                xml3.InnerText = this.txtEmail.Value.Trim();   
                xml0.AppendChild(xml3);//添加   
  
                XmlElement xml4 = xmld.CreateElement("Content");//创建一个Content节点   
                xml4.InnerText = this.txtContent.Value;   
                xml0.AppendChild(xml4);//添加   
  
                XmlElement xml5 = xmld.CreateElement("Time");//创建一个Time节点   
                xml5.InnerText = DateTime.Now.ToString("yyyy-MM-dd");   
                xml0.AppendChild(xml5);//添加   
  
                root.AppendChild(xml0);   
  
                xmld.Save(Server.MapPath("App_Code/Message.xml"));  

删除

XmlDocument xmld = new XmlDocument();   
  
       xmld.Load(Server.MapPath("App_Code/Message.xml"));   
  
       XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes;   
  
       foreach (XmlNode var in list)   
       {   
           XmlElement xmle = (XmlElement)var;   
  
           if (xmle.GetAttribute("id") == Id)//如果ID等于文本的值就删除   
           {   
               xmle.RemoveAll();   
               xmld.Save(Server.MapPath("App_Code/Message.xml"));//删除后记得一定要保存   
               Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('删除成功!!');", true);   
           }   
           else  
           {   
               Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('删除失败!!');", true);   
           }   
       }  

更改

XmlDocument xmld = new XmlDocument();   
       xmld.Load(Server.MapPath("App_Code/Message.xml"));   
  
       XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes;   
  
       foreach (XmlNode xmln in list)   
       {   
           XmlElement xmle = (XmlElement)xmln;//格式转换   
           if (Request["ID"].Equals(xmle.GetAttribute("id")))   
           {   
               xmle.ChildNodes[0].InnerText = this.txtName.Value;   
               xmle.ChildNodes[1].InnerText = this.txtQQ.Value;   
               xmle.ChildNodes[2].InnerText = this.txtEmail.Value;   
               xmle.ChildNodes[3].InnerText = this.txtContent.Value;   
  
               xmld.Save(Server.MapPath("App_Code/Message.xml"));   
               Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('修改成功!!!');location.href='MessageList.aspx'",true);   
           }   
       }  

查找

//下面的代码开始是用页面编码的方式实现的   
XmlDocument xmld = new XmlDocument();//构建xml文档   
            xmld.Load(Server.MapPath("App_Code/Message.xml"));//加载   
  
            XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes;//获取子节点   
            if (list!=null)   
            {   
            foreach (XmlNode node in list)   
            {   
                XmlElement xmle = (XmlElement)node;//转换   

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace Doxml
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //插入节点
        private void button1_Click(object sender, EventArgs e)
        {
          
            //<book genre="李赞红" ISBN="2-3631-4">
            // <title>CS从入门到精通</title>
            // <author>候捷</author>
            // <price>58.3</price>
            //</book>

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(@"D:\XMLFile.xml");
            XmlNode root = xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>

            XmlElement xe1 = xmlDoc.CreateElement("book");//创建一个<book>节点
            xe1.SetAttribute("genre", "李赞红");//设置该节点genre属性
            xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性

            XmlElement xesub1 = xmlDoc.CreateElement("title");
            xesub1.InnerText = "CS从入门到精通";//设置文本节点
            //AppendChild 将指定的节点添加到该节点的子节点列表的末尾。
            xe1.AppendChild(xesub1);//添加到<book>节点中

            XmlElement xesub2 = xmlDoc.CreateElement("author");
            // InnerText 获取或设置节点及其所有子级的串联值。 如果该节点下面含有串联的子级则予以全部覆盖指定的文本内容
            xesub2.InnerText = "候捷";
           
            xe1.AppendChild(xesub2);
            XmlElement xesub3 = xmlDoc.CreateElement("price");
            xesub3.InnerText = "58.3";
            xe1.AppendChild(xesub3);

         
            root.AppendChild(xe1);//添加到<bookstore>节点中
            xmlDoc.Save(@"D:\XMLFile.xml");

        }

        //修改节点
        private void button2_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(@"D:\XMLFile.xml");
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
            foreach (XmlNode xn in nodeList)//遍历所有子节点
            {
                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“李赞红”
                {
                    xe.SetAttribute("genre", "update李赞红");//则修改该属性为“update李赞红”

                    XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                    foreach (XmlNode xn1 in nls)//遍历
                    {
                        XmlElement xe2 = (XmlElement)xn1;//转换类型
                        if (xe2.Name == "author")//如果找到
                        {
                            xe2.InnerText = "亚胜";//则修改
                            break;//找到退出来就可以了
                        }
                    }
                    break;
                }
            }

            xmlDoc.Save(@"D:\XMLFile.xml");//保存。
        }
        //删除节点
        private void button3_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(@"D:\XMLFile.xml");
            //XmlNodeList 排序的结点集合 ChildNodes 获取指定节点下的子节点
            XmlNodeList xnl = xmlDoc.SelectSingleNode("bookstore").ChildNodes;

            //XmlNode表示XML文档中的单个节点
            foreach (XmlNode xn in xnl)
            {
                //将节点转化为一个元素
                XmlElement xe = (XmlElement)xn;
                //提取指定属性值的元素,予以删除属性
                if (xe.GetAttribute("genre") == "fantasy")
                {
                    //移除属性
                    xe.RemoveAttribute("genre");//删除genre属性
                }
                else if (xe.GetAttribute("genre") == "update李赞红")
                {
                    //移除指定节点下的内容,包括其子节点
                    xe.RemoveAll();//删除该节点的全部内容
                }
            }
            xmlDoc.Save(@"D:\XMLFile.xml");
        }

        //提取内容
        private void button4_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            richTextBox1.LoadFile(@"D:\XMLFile.xml",RichTextBoxStreamType.PlainText);
        }
    }
}

运行界面如下:


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

下面看实例:

XML文件:books.xml

Code [http://www.xueit.com]
1<?xml version="1.0" encoding="UTF-8"?> 2<books> 3 <book> 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#代码:

C# Code [http://www.xueit.com]
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 {12 XmlElement theBook = null, theElem = null, root = null;13 XmlDocument xmldoc = new XmlDocument();14 try15 {16 xmldoc.Load("Books.xml");17 root = xmldoc.DocumentElement;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";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);35 //--- 新建一本书完成 ----3637 //--- 下面对《哈里波特》做一些修改。 ----38 //--- 查询找《哈里波特》----39 theBook = (XmlElement)root.SelectSingleNode("/books/book[name=''哈里波特'']");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 //--- 再将所有价格低于10的书删除 ----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}
原文地址:https://www.cnblogs.com/Leo_wl/p/1740222.html