C# XML文件操作(增删改查)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36981814/article/details/86679079

一、利用DOM(文档对象模型)写入一个XML文件

        static void Main(string[] args)
        {
            //1、创建一个XML文档对象
            XmlDocument doc = new XmlDocument();
            //2、创建第一行描述信息
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            //3、将创建的第一行数据添加到文档中
            doc.AppendChild(dec);
            //4、给文档添加根节点(只能有一个根节点)
            XmlElement books = doc.CreateElement("Books");
            //5、将根节点添加给文档对象
            doc.AppendChild(books);

            //6、给根节点添加子节点
            XmlElement book1 = doc.CreateElement("Book");
            //将子节点book1添加到根节点下
            books.AppendChild(book1);
            //7、给book1添加子节点
            XmlElement bookName1 = doc.CreateElement("BookName");
            bookName1.InnerText = "水浒传";
            book1.AppendChild(bookName1);
            XmlElement author1 = doc.CreateElement("Author");
            author1.InnerText = "小明";
            book1.AppendChild(author1);
            XmlElement price1 = doc.CreateElement("Price");
            price1.InnerXml = "100RMB";
            book1.AppendChild(price1);
            XmlElement des1 = doc.CreateElement("Des");
            des1.InnerXml = "非常好看";
            book1.AppendChild(des1);


            Console.WriteLine("保存成功");
            doc.Save("Book.xml");
            Console.ReadKey();
        }

xml文档结果:

<?xml version="1.0" encoding="utf-8"?>
<Books>
  <Book>
    <BookName>水浒传</BookName>
    <Author>小明</Author>
    <Price>100RMB</Price>
    <Des>非常好看</Des>
  </Book>
</Books>

二、添加带属性的XML文档

        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            doc.AppendChild(dec);
            XmlElement order = doc.CreateElement("Order");
            doc.AppendChild(order);

            XmlElement customerName = doc.CreateElement("CustomerName");
            customerName.InnerXml = "刘洋";
            order.AppendChild(customerName);

            XmlElement orderNumber = doc.CreateElement("OrderNumber");
            orderNumber.InnerXml = "10000";
            order.AppendChild(orderNumber);


            XmlElement items = doc.CreateElement("Items");
            order.AppendChild(items);


            XmlElement orderItem1 = doc.CreateElement("OrderItem");
            orderItem1.SetAttribute("Name", "码表");
            orderItem1.SetAttribute("Count", "100001");
            items.AppendChild(orderItem1);

            XmlElement orderItem2 = doc.CreateElement("OrderItem");
            orderItem2.SetAttribute("Name", "雨衣");
            orderItem2.SetAttribute("Count", "1");
            items.AppendChild(orderItem2);

            XmlElement orderItem3 = doc.CreateElement("OrderItem");
            orderItem3.SetAttribute("Name", "手套");
            orderItem3.SetAttribute("Count","1");
            items.AppendChild(orderItem3);

            doc.Save("Order.xml");
            Console.WriteLine("保存成功");
            Console.ReadKey();
        }

xml文档结果:

<?xml version="1.0" encoding="utf-8"?>
<Order>
  <CustomerName>刘洋</CustomerName>
  <OrderNumber>10000</OrderNumber>
  <Items>
    <OrderItem Name="码表" Count="100001" />
    <OrderItem Name="雨衣" Count="1" />
    <OrderItem Name="手套" Count="1" />
  </Items>
</Order>

三、DOM方式创建XML对象

        static void Main(string[] args)
        {
            List<Student> list = new List<Student>();
            list.Add(new Student() { ID = 1, Name = "玉米", Gender = '男', Age = 30 });
            list.Add(new Student() { ID = 2, Name = "王者", Gender = '女', Age = 20 });
            list.Add(new Student() { ID = 3, Name = "刘华", Gender = '男', Age = 50 });
            list.Add(new Student() { ID = 4, Name = "张校", Gender = '男', Age = 60 });
            list.Add(new Student() { ID = 5, Name = "哥哥", Gender = '男', Age = 10 });


            XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            doc.AppendChild(dec);
            XmlElement person = doc.CreateElement("Person");
            doc.AppendChild(person);

            //通过循环List集合,获得所有对象 以节点的形式添加到XML文档中
            for (int i = 0; i < list.Count; i++)
            {
                XmlElement student = doc.CreateElement("Student");
                student.SetAttribute("studentID", list[i].ID.ToString());
                XmlElement name = doc.CreateElement("Name");
                name.InnerXml = list[i].Name;
                XmlElement age = doc.CreateElement("Age");
                age.InnerXml = list[i].Age.ToString();
                XmlElement gender = doc.CreateElement("Gender");
                gender.InnerXml = list[i].Gender.ToString();
                //添加
                person.AppendChild(student);
                student.AppendChild(name);
                student.AppendChild(age);
                student.AppendChild(gender);


            }

            doc.Save("Student.xml");
            Console.WriteLine("保存成功");
            Console.ReadKey();

        }
    class Student
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public int ID { get; set; }
        public char Gender { get; set; }
    }

xml文档结果:

<?xml version="1.0" encoding="utf-8"?>
<Person>
  <Student studentID="1">
    <Name>玉米</Name>
    <Age>30</Age>
    <Gender>男</Gender>
  </Student>
  <Student studentID="2">
    <Name>王者</Name>
    <Age>20</Age>
    <Gender>女</Gender>
  </Student>
  <Student studentID="3">
    <Name>刘华</Name>
    <Age>50</Age>
    <Gender>男</Gender>
  </Student>
  <Student studentID="4">
    <Name>张校</Name>
    <Age>60</Age>
    <Gender>男</Gender>
  </Student>
  <Student studentID="5">
    <Name>哥哥</Name>
    <Age>10</Age>
    <Gender>男</Gender>
  </Student>
</Person>

四、对xml文档实现增删改查

4.1追加内容

            #region 对xml文档实现追加的需求
            XmlDocument doc = new XmlDocument();
            //首先判断xml文档是否存在 如果存在 则追加  否则创建一个
            if (File.Exists("Student.xml"))
            {
                //加载进来
                doc.Load("Student.xml");
                //获得根节点 给根节点添加子节点

                XmlElement person = doc.DocumentElement;
                XmlElement student = doc.CreateElement("Student");
                student.SetAttribute("studentID", "01");

                XmlElement name = doc.CreateElement("Name");
                name.InnerXml = "李思思";
                XmlElement age = doc.CreateElement("Age");
                age.InnerXml = "18";
                XmlElement gender = doc.CreateElement("Gender");
                gender.InnerXml = "女";

                //添加
                person.AppendChild(student);
                student.AppendChild(name);
                student.AppendChild(age);
                student.AppendChild(gender);

            }
            else
            {
                //不存在

                XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                doc.AppendChild(dec);

                XmlElement person = doc.CreateElement("Person");
                XmlElement student = doc.CreateElement("Student");
                student.SetAttribute("studentID", "110");

                XmlElement name = doc.CreateElement("Name");
                name.InnerXml = "张三三";
                XmlElement age = doc.CreateElement("Age");
                age.InnerXml = "28";
                XmlElement gender = doc.CreateElement("Gender");
                gender.InnerXml = "男";

                //添加
                doc.AppendChild(person);
                person.AppendChild(student);
                student.AppendChild(name);
                student.AppendChild(age);

                student.AppendChild(gender);
            }

            doc.Save("Student.xml");
            Console.WriteLine("保存成功");

4.2读取xml文档内容、修改

            #region 读取XML文档(读取所有节点)
            XmlDocument doc = new XmlDocument();
            doc.Load("order.xml");//xml文件名不区分大小写
            //获得根节点
            XmlElement order = doc.DocumentElement;
            //获得根节点的所有子节点
            XmlNodeList xnl = order.ChildNodes;

            //使用下述方法则无法读取子节点的属性
            foreach (XmlNode item in xnl)
            {
                Console.WriteLine(item.InnerText);
            }


            XmlElement items = order["Items"];
            XmlNodeList xnl2 = items.ChildNodes;
            foreach (XmlNode item in xnl2)
            {
                Console.WriteLine(item.Attributes["Name"].Value);
                Console.WriteLine(item.Attributes["Count"].Value);

                //通过一下方式可以实现对指定属性的更改
                if (item.Attributes["Name"].Value == "手套")
                {
                    item.Attributes["Count"].Value = "New123";
                }
            }

            doc.Save("OrDER.xml");
            Console.ReadKey();
            #endregion


            #region 使用XPath的方式来读取XML文件(读取一个节点)
            XmlDocument doc = new XmlDocument();
            doc.Load("order.xml");
            //获得根节点
            XmlElement order = doc.DocumentElement;
            //获得某一个节点
            XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");
            //输出
            Console.WriteLine(xn.Attributes["Name"].Value);
            //为该节点赋予新值
            xn.Attributes["Count"].Value = "New1000";

            doc.Save("order.xml");
            Console.WriteLine("保存成功");
            Console.ReadKey();
            #endregion

4.3删除

            XmlDocument doc = new XmlDocument();
            doc.Load("order.xml");
            //doc.RemoveAll();注意:不行,根节点不允许删除
            XmlElement order = doc.DocumentElement;
            //order.RemoveAll();移除根节点下的所有子节点

            XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='雨衣']");
            XmlNode orderItem = order.SelectSingleNode("/Order/Items/OrderItem");
            XmlNode items = order["Items"];//order.SelectSingleNode("/Order/Items"); 两种都可以

            //items.RemoveChild(xn);//移除当前整个节点
            xn.Attributes.RemoveNamedItem("Count");//移除当前节点某个属性

            doc.Save("order.xml");
            Console.WriteLine("删除成功");
            Console.ReadKey();

五、实例:使用XML实现增删改查

通过简单实例实现xml文件的增删改查,效果图如下:

效果图

实例代码下载

猜你喜欢

转载自blog.csdn.net/qq_36981814/article/details/86679079