• 使用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}
  • 相关阅读:
    head命令
    less命令
    解决get方法传递URL参数中文乱码问题
    The method convert(String) of type DateConverter must override a superclass method
    Tomcat Can't load AMD 64-bit .dll on a IA 32
    聚合函数查询 group by having
    string[] 清理重复+反转显示
    C# GetValueList 获得字符串中开始和结束字符串中间得值列表
    C# GetValue 正则获取开始结束代码
    string [] 去除重复字符两个方法
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1740222.html
Copyright © 2020-2023  润新知