ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用C#对XML进行增删改查操作

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

原创 Linux操作系统 作者:iDotNetSpace 时间:2010-05-21 17:45:05 0 删除 编辑

xml文件格式

01 "1.0" encoding="utf-8"?>  
02   
03   "1">  
04     熊猫  
05     123456  
06     panda@qq.com  
07     asfdsafasdfasdfsad我是内容  
08       
09     
10

1.添加

01 XmlDocument xmld = new XmlDocument();   
02                 xmld.Load(Server.MapPath("App_Code/Message.xml"));//加载xml文件    
03                 XmlNode root = xmld.SelectSingleNode("messageList");//查找messageList节点   
04     
05                 int i = xmld.SelectSingleNode("messageList").ChildNodes.Count + 1;   
06                 XmlElement xml0 = xmld.CreateElement("message");   
07                 xml0.SetAttribute("id", i.ToString());   
08     
09                 XmlElement xml1 = xmld.CreateElement("Name");//创建一个Name节点   
10                 xml1.InnerText = this.txtName.Value.Trim();   
11                 xml0.AppendChild(xml1);//添加   
12     
13                 XmlElement xml2 = xmld.CreateElement("QQ");//创建QQ节点   
14                 xml2.InnerText = this.txtQQ.Value.Trim();   
15                 xml0.AppendChild(xml2);//添加   
16     
17                 XmlElement xml3 = xmld.CreateElement("Email");//创建一个Email节点   
18                 xml3.InnerText = this.txtEmail.Value.Trim();   
19                 xml0.AppendChild(xml3);//添加   
20     
21                 XmlElement xml4 = xmld.CreateElement("Content");//创建一个Content节点   
22                 xml4.InnerText = this.txtContent.Value;   
23                 xml0.AppendChild(xml4);//添加   
24     
25                 XmlElement xml5 = xmld.CreateElement("Time");//创建一个Time节点   
26                 xml5.InnerText = DateTime.Now.ToString("yyyy-MM-dd");   
27                 xml0.AppendChild(xml5);//添加   
28     
29                 root.AppendChild(xml0);   
30     
31                 xmld.Save(Server.MapPath("App_Code/Message.xml"));

删除

01 XmlDocument xmld = new XmlDocument();   
02     
03        xmld.Load(Server.MapPath("App_Code/Message.xml"));   
04     
05        XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes;   
06     
07        foreach (XmlNode var in list)   
08        {   
09            XmlElement xmle = (XmlElement)var;   
10     
11            if (xmle.GetAttribute("id") == Id)//如果ID等于文本的值就删除   
12            {   
13                xmle.RemoveAll();   
14                xmld.Save(Server.MapPath("App_Code/Message.xml"));//删除后记得一定要保存   
15                Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('删除成功!!');", true);   
16            }   
17            else  
18            {   
19                Page.ClientScript.RegisterStartupScript(GetType(), "", "alert('删除失败!!');", true);   
20            }   
21        }

更改

01 XmlDocument xmld = new XmlDocument();   
02        xmld.Load(Server.MapPath("App_Code/Message.xml"));   
03     
04        XmlNodeList list = xmld.SelectSingleNode("messageList").ChildNodes;   
05     
06        foreach (XmlNode xmln in list)   
07        {   
08            XmlElement xmle = (XmlElement)xmln;//格式转换   
09            if (Request["ID"].Equals(xmle.GetAttribute("id")))   
10            {   
11                xmle.ChildNodes[0].InnerText = this.txtName.Value;   
12                xmle.ChildNodes[1].InnerText = this.txtQQ.Value;   
13                xmle.ChildNodes[2].InnerText = this.txtEmail.Value;   
14                xmle.ChildNodes[3].InnerText = this.txtContent.Value;   
15     
16                xmld.Save(Server.MapPath("App_Code/Message.xml"));   
17                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('修改成功!!!');location.href='MessageList.aspx'",true);   
18            }   
19        }

查找

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

"FONT-SIZE: 12pt">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;

"FONT-SIZE: 12pt">namespace Doxml
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

"FONT-SIZE: 12pt">        //插入节点
        private void button1_Click(object sender, EventArgs e)
        {
          
            //
            // CS从入门到精通
            // 候捷
            // 58.3
            //

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

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

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

            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);//添加到节点中
            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);
        }
    }
}

运行界面如下:

http://hiphotos.baidu.com/jiang_yy_jiang/pic/item/bfef0c5ca84e0c71faf2c00b.jpg" border=0 small="0">

01

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

下面看实例:

XML文件:books.xml

"BORDER-RIGHT: #dddddd 1px solid; BORDER-TOP: #dddddd 1px solid; BACKGROUND: #ffffff 0px 0px; OVERFLOW: hidden; BORDER-LEFT: #dddddd 3px solid; WIDTH: 100%; BORDER-BOTTOM: #dddddd 1px solid">
"PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; BACKGROUND: #f5f5f5 0px 0px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; BORDER-BOTTOM: #dddddd 1px dotted"> Code "FONT-WEIGHT: 100; COLOR: #f5f5f5">[http://www.xueit.com]
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1xml version="1.0" encoding="UTF-8"?> 2<books> 3 <book> 4  <name>哈里波特name> 5  <price>10price> 6  <memo>这是一本很好看的书。memo> 7 book> 8 <book id="B02"> 9  <name>三国演义name>10  <price>10price>11  <memo>四大名著之一。memo>12 book>13 <book id="B03">14  <name>水浒name>15  <price>6price>16  <memo>四大名著之一。memo>17 book>18 <book id="B04">19  <name>红楼name>20  <price>5price>21  <memo>四大名著之一。memo>22 book>23books> 
02
03
04

下面是C#代码:

05
"BORDER-RIGHT: #dddddd 1px solid; BORDER-TOP: #dddddd 1px solid; BACKGROUND: #ffffff 0px 0px; OVERFLOW: hidden; BORDER-LEFT: #dddddd 3px solid; WIDTH: 100%; BORDER-BOTTOM: #dddddd 1px solid">
06
"PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; BACKGROUND: #f5f5f5 0px 0px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; BORDER-BOTTOM: #dddddd 1px dotted"> C# Code "FONT-WEIGHT: 100; COLOR: #f5f5f5">[http://www.xueit.com]
07
"PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; LINE-HEIGHT: 140%; PADDING-TOP: 6px">
08
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.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}
09
10

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-663387/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5766516