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

时间:2022-10-20 23:42:39

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);
        }
    }
}

运行界面如下:

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

在.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; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Xml; 5 6 namespace 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 try 15 { 16 xmldoc.Load( " Books.xml " ); 17 root = xmldoc.DocumentElement; 18 19 // --- 新建一本书开始 ---- 20 theBook = xmldoc.CreateElement( " book " ); 21 theElem = xmldoc.CreateElement( " name " ); 22 theElem.InnerText = " 新书 " ; 23 theBook.AppendChild(theElem); 24 25 theElem = xmldoc.CreateElement( " price " ); 26 theElem.InnerText = " 20 " ; 27 theBook.AppendChild(theElem); 28 29 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 // --- 新建一本书完成 ---- 36 37 // --- 下面对《哈里波特》做一些修改。 ---- 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 // --- 对《哈里波特》修改完成。 ---- 51 52 // --- 再将所有价格低于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); 59 60 // --- 再将所有价格低于10的书删除 ---- 61 XmlNodeList someBooks = root.SelectNodes( " /books/book[price<10] " ); 62 Console.Out.WriteLine( " --- 再将所有价格低于10的书删除 --- " ); 63 Console.Out.WriteLine( " --- 符合条件的书有  " someBooks.Count " 本。 --- " ); 64 65 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); 71 72 xmldoc.Save( " books.xml " ); // 保存到books.xml 73 74 Console.In.Read(); 75 } 76 catch (Exception e) 77 { 78 Console.Out.WriteLine(e.Message); 79 } 80 } 81 } 82 }