zoukankan      html  css  js  c++  java
  • XML

    基础

    • 可扩展的标记语言
    • 优点:
      • 容易读懂
      • 格式标准任何语言都内置了XML分析引擎,不用单独进行文件分析引擎的编写
    • Node :所看到的均是节点
    • Element:元素就是标签
    • 节点包含元素
    • 大小写敏感

    写入XML

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _01WriteXML
    {
        class Program
        {
            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");
                //7.将子结点book1添加到根节点下
                books.AppendChild(book1);
    
                //8.给book1添加子节点
                XmlElement book1Name = doc.CreateElement("BookName");
                //9.设置标签中显示的文本
                book1Name.InnerText = "水浒传";
                book1.AppendChild(book1Name);
    
                XmlElement book1Author = doc.CreateElement("Author");
                book1Author.InnerText = "<author>匿名</author>";
                book1.AppendChild(book1Author);
    
                XmlElement book1Price = doc.CreateElement("Price");
                book1Price.InnerXml = "<author>匿名</author>";
                book1.AppendChild(book1Price);
    
                XmlElement book1Des = doc.CreateElement("Des");
                book1Des.InnerXml = "好看呢";
                book1.AppendChild(book1Des);
    
                doc.Save("Book.xml");
                Console.WriteLine("保存成功!");
                Console.ReadKey();
            }
        }
    }
    //XML
    <?xml version="1.0" encoding="utf-8"?>
    <Books>
      <Book>
        <BookName>水浒传</BookName>
        <Author>&lt;author&gt;匿名&lt;/author&gt;</Author>
        <Price>
          <author>匿名</author>
        </Price>
        <Des>好看呢</Des>
      </Book>
    </Books>
    
    //InnerXml和InnerText的区别
    book1Price.InnerXml = "<author>匿名</author>";
    在XML中显示:
        <Price>
          <author>匿名</author>
        </Price>
        
    book1Author.InnerText = "<author>匿名</author>";
    在XML中显示:
    <Author>&lt;author&gt;匿名&lt;/author&gt;</Author>
    

    写入带属性的XML

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _02WriteXMLWithAttribute
    {
        class Program
        {
            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 = "刘XX";
                order.AppendChild(customerName);
    
                XmlElement orderNumber = doc.CreateElement("OrderNumber");
                orderNumber.InnerXml = "100";
                order.AppendChild(orderNumber);
    
                XmlElement items = doc.CreateElement("Items");
                order.AppendChild(items);
    
                XmlElement orderItem1 = doc.CreateElement("OrderItem1");
                orderItem1.SetAttribute("Name", "锅巴");
                orderItem1.SetAttribute("Count", "10");
                orderItem1.SetAttribute("Price", "12");
                items.AppendChild(orderItem1);
    
                XmlElement orderItem2 = doc.CreateElement("OrderItem2");
                orderItem2.SetAttribute("Name", "杯子");
                orderItem2.SetAttribute("Count", "6");
                orderItem2.SetAttribute("Price", "8");
                items.AppendChild(orderItem2);
    
                doc.Save("Order.xml");
                Console.WriteLine("保存成功!");
                Console.ReadKey();
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Order>
      <CustomerName>刘XX</CustomerName>
      <OrderNumber>100</OrderNumber>
      <Items>
        <OrderItem1 Name="锅巴" Count="10" Price="12" />
        <OrderItem2 Name="杯子" Count="6" Price="8" />
      </Items>
    </Order>
    

    文档对象模型

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _03DocumentObjectModel
    {
        class Student
        {
            public int Age { get; set; }
            public string Name { get; set; }
            public int ID { get; set; }
            public char Gender { get; set; }
        }
        class Program
        {
            static void Main(string[] args)
            {
                List<Student> list = new List<Student>();
                list.Add(new Student() { ID = 1, Name = "张三", Gender = '男', Age = 12 });
                list.Add(new Student() { ID = 2, Name = "李四", Gender = '男', Age = 30 });
                list.Add(new Student() { ID = 3, Name = "王五", Gender = '男', Age = 5 });
                list.Add(new Student() { ID = 4, Name = "张丽", Gender = '女', Age = 18 });
    
                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 gender = doc.CreateElement("Gender");
                    gender.InnerXml = list[i].Gender.ToString();
    
                    XmlElement age = doc.CreateElement("Age");
                    age.InnerXml = list[i].Age.ToString();
    
                    person.AppendChild(student);
                    student.AppendChild(name);
                    student.AppendChild(gender);
                    student.AppendChild(age);
                }
    
                doc.Save("Student.xml");
                Console.WriteLine("保存成功!");
                Console.ReadKey();
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Person>
      <Student studentID="1">
        <Name>张三</Name>
        <Gender>男</Gender>
        <Age>12</Age>
      </Student>
      <Student studentID="2">
        <Name>李四</Name>
        <Gender>男</Gender>
        <Age>30</Age>
      </Student>
      <Student studentID="3">
        <Name>王五</Name>
        <Gender>男</Gender>
        <Age>5</Age>
      </Student>
      <Student studentID="4">
        <Name>张丽</Name>
        <Gender>女</Gender>
        <Age>18</Age>
      </Student>
    </Person>
    

    对XML增加

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    using System.IO;
    namespace _04AddXML
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                //1.首先判断xml文档是否存在,若存在,则追加,否则创建一个
                if(File.Exists("Student.xml"))
                {
                    //2.加载进来
                    doc.Load("Student.xml");
                    //3.获得根节点
                    XmlElement person = doc.DocumentElement;
                    //4.追加
                    XmlElement student = doc.CreateElement("Student");
                    student.SetAttribute("studentID", "10");
                    person.AppendChild(student);
                    XmlElement name = doc.CreateElement("Name");
                    name.InnerXml = "赵十";
                    student.AppendChild(name);
                    XmlElement gender = doc.CreateElement("Gender");
                    gender.InnerXml = "女";
                    student.AppendChild(gender);
                    XmlElement age = doc.CreateElement("Age");
                    age.InnerXml = "18";
                    student.AppendChild(age);
                }
                else
                {
                    //2.不存在,则创建描述文件、根节点
                    XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
                    doc.AppendChild(dec);
                    XmlElement person = doc.CreateElement("Person");
                    doc.AppendChild(person);
                    //3.追加
                    XmlElement student = doc.CreateElement("Student");
                    student.SetAttribute("studentID", "11");
                    person.AppendChild(student);
                    XmlElement name = doc.CreateElement("Name");
                    name.InnerXml = "赵十一";
                    student.AppendChild(name);
                    XmlElement gender = doc.CreateElement("Gender");
                    gender.InnerXml = "男";
                    student.AppendChild(gender);
                    XmlElement age = doc.CreateElement("Age");
                    age.InnerXml = "16";
                    student.AppendChild(age);
    
                }
                doc.Save("Student.xml");
                Console.WriteLine("保存成功!");
                Console.ReadKey();
            }
        }
    }
    //XML:
    //已存在XML
    <?xml version="1.0" encoding="utf-8"?>
    <Person>
      <Student studentID="1">
        <Name>张三</Name>
        <Gender>男</Gender>
        <Age>12</Age>
      </Student>
      <Student studentID="2">
        <Name>李四</Name>
        <Gender>男</Gender>
        <Age>30</Age>
      </Student>
      <Student studentID="3">
        <Name>王五</Name>
        <Gender>男</Gender>
        <Age>5</Age>
      </Student>
      <Student studentID="4">
        <Name>张丽</Name>
        <Gender>女</Gender>
        <Age>18</Age>
      </Student>
      <Student studentID="10">
        <Name>赵十</Name>
        <Gender>女</Gender>
        <Age>18</Age>
      </Student>
    </Person>
    //不存在XML
    <?xml version="1.0" encoding="utf-8"?>
    <Person>
      <Student studentID="11">
        <Name>赵十一</Name>
        <Gender>男</Gender>
        <Age>16</Age>
      </Student>
    </Person>
    

    读取XML

    • xml文件名不区分大小写,均可读取
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _05ReadXML
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                //加载xml
                doc.Load("Order.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);
                }
                Console.ReadKey();
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Order>
      <CustomerName>刘XX</CustomerName>
      <OrderNumber>100</OrderNumber>
      <Items>
        <OrderItem1 Name="锅巴" Count="10" Price="12" />
        <OrderItem2 Name="杯子" Count="6" Price="8" />
      </Items>
    </Order>
    //输出:
    刘XX
    100
    
    锅巴
    10
    杯子
    6
    

    修改XML

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _06AlterXML
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                //加载xml
                doc.Load("Order.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 = "+10";
                    }
                }
                doc.Save("Order.xml");
                Console.ReadKey();
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Order>
      <CustomerName>刘XX</CustomerName>
      <OrderNumber>100</OrderNumber>
      <Items>
        <OrderItem1 Name="锅巴" Count="+10" Price="12" />
        <OrderItem2 Name="杯子" Count="6" Price="8" />
      </Items>
    </Order>
    

    使用XPath的方式读XML

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _07ReadXMLWithXPath
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("Order.xml");
                //获得根节点
                XmlElement order = doc.DocumentElement;
                XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem1[@Name='锅巴']");
                Console.WriteLine(xn.Attributes["Name"].Value);
                Console.ReadKey();
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Order>
      <CustomerName>刘XX</CustomerName>
      <OrderNumber>100</OrderNumber>
      <Items>
        <OrderItem1 Name="锅巴" Count="+10" Price="12" />
        <OrderItem2 Name="杯子" Count="6" Price="8" />
      </Items>
    </Order>
    //输出:锅巴
    

    使用XPath的方式修改XML

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _08AlterXMLWithXPath
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("Order.xml");
                //获得根节点
                XmlElement order = doc.DocumentElement;
                XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem1[@Name='锅巴']");
                //Console.WriteLine(xn.Attributes["Name"].Value);
                //修改
                xn.Attributes["Count"].Value = "又+10";
                doc.Save("Order.xml");
                Console.WriteLine("保存成功!");
                Console.ReadKey();
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Order>
      <CustomerName>刘XX</CustomerName>
      <OrderNumber>100</OrderNumber>
      <Items>
        <OrderItem1 Name="锅巴" Count="又+10" Price="12" />
        <OrderItem2 Name="杯子" Count="6" Price="8" />
      </Items>
    </Order>
    

    使用XPath的方式删除XML

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace _09DeleteXMLWithXPath
    {
        class Program
        {
            static void Main(string[] args)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load("Order.xml");
                // doc.RemoveAll();//不行,根节点不允许删除
                XmlElement order = doc.DocumentElement;
                //order.RemoveAll();//移除根节点下的所有子节点
                XmlNode xn = order.SelectSingleNode("/Order/Items/OrderItem[@Name='锅巴']");
                //orderItem删除属性
                XmlNode orderItem = order.SelectSingleNode("/Order/Items/OrderItem");
                //获得items节点
                XmlNode items = order["Items"];//或者order.SelectSingleNode("/Order/Items");
                items.RemoveChild(xn);//移除当前节点(锅巴)
                //删除杯子的Count属性
                XmlNode xn1 = order.SelectSingleNode("/Order/Items/OrderItem[@Name='杯子']");
                xn1.Attributes.RemoveNamedItem("Count");
                doc.Save("Order.xml");
                Console.WriteLine("删除成功!");
                Console.ReadKey();  
            }
        }
    }
    //XML:
    <?xml version="1.0" encoding="utf-8"?>
    <Order>
      <CustomerName>刘XX</CustomerName>
      <OrderNumber>100</OrderNumber>
      <Items>
        <OrderItem Name="杯子" Price="8" />
      </Items>
    </Order>
    
  • 相关阅读:
    串匹配(C/C++实现)
    稀疏数组-矩阵存储【C语言实现】
    mysql frm、MYD、MYI数据文件恢复,导入MySQL中
    我们为什么要分库分表?
    golang 使用goto进行多错误处理
    mongodb 查看、创建、修改、删除索引
    MyBatis中模糊搜索使用like匹配带%字符时失效问题
    MySQL 用 limit 为什么会影响性能?
    【java框架】SpringBoot(10) -- SpringBoot巧用 @Async提升API接口并发能力
    【Java代码之美】 -- Java17新特性初探
  • 原文地址:https://www.cnblogs.com/ChaoJieLiu/p/11954833.html
Copyright © 2011-2022 走看看