自学内容网 自学内容网

XML的基础知识及XMl文件的创建/读取/更新demo详解

1.什么是xml?

Xml(Extensible Markup Language),可扩展标记语言,一种用于存储数据或传输数据的标记语言,由万维网(W3C开发)。它允许开发人员创建自己的标记,且简单易读,易扩展,支持标准的字符编码,如UFT-8,UTF-16.

2. Xml文档的基本结构

2.1文档声明,包括文档版本(version)、编码格式(encoding).

<?xml version = “1.0”,encoding = “UTF-8”?>

2.2根元素(root element)

Xml文档必须包含一个根元素,其是xml文档所有元素的父元素,如:

<root>

  <!--其他元素-->

</root>

2.3元素(element)

是xml文档的基本单位,包含文本和属性,元素用标签来标识,由<p>开始,</p>结束,如:

<p>这是一个段落</p>

2.4属性(property)

属性是元素的附加信息,属性在开始标签中定义,并以键值对的形式出现.如:

<p link = “www.baidu.com”这是一个链接/p>

2.5注释(Comment)

注释用于在xml文档中添加解释和说明,格式以<!--开始,以-->, 如下:

<!--这是我的注释-->

3.C#对xml文档的抽象

C#对xml文件进行了结构的抽象,支持xml文档的创建、读、写等操作.

3.1 xml文档被抽象成XmlDocument对象,Xml文档对象可以用XmlReader和XmlWriter类对xml文件对象进行读写

3.2 xml文档的元素

被抽象为XmlElement对象,这些对象包含了元素的名称,属性,子元素

3.3 xml文档的属性

XmlAttribute包含了元素的属性名称和值

3.4Xml文档的文本内容

XmlText对象访问文本内容

3.5xml节点处理

XmlNodelist,XmlNodeReader,XmlNodeWriter,用于xml文档的节点列表,读取,写入xml节点.

以上的类都在System.Xml命名空间下,需要引入.

4.创建xml文件的demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace _1.创建xml
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            
            //定义xml声明信息
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            
            //xml声明信息添加到文档对象下
            doc.AppendChild(dec);

            //给xml文档声明行添加注释
            doc.AppendChild(doc.CreateComment("line above is the declaration for the xml document"));

            //创建根元素的注释
            XmlNode com = doc.CreateComment("line below is the root element");
            doc.AppendChild(com);
            
            //创建根节点
            XmlElement root = doc.CreateElement("Root");

            //将创建的Root元素添加到xml文档的根节点中
            doc.AppendChild(root);

            //循环添加多个结构相同的节点
            int subnodeCnt = 6;
            //定义随机数对象,用于产生年龄
            Random rdm = new Random();
            for (int i = 0; i < subnodeCnt; i++)
            {
                //创建当前元素的注释
                XmlComment comment =  doc.CreateComment($"这是第{i + 1}个子节点");
                //将注释添加到root下面
                root.AppendChild(comment);
                
                //创建当前元素
                XmlElement element = doc.CreateElement($"学生{i + 1}");
                
                //给当前元素添加属性,如果当前元素没有ID属性,则添加ID属性;如果当前元素有ID属性,则更新ID属性的值
                element.SetAttribute("ID", $"{i + 100}");

                //给当前元素添加子元素,描述学生姓名信息
                XmlElement name = doc.CreateElement("name");
                name.InnerText = $"学生{i+1}";
                element.AppendChild(name);

                //给当前元素添加子节点,描述学生的年龄信息
                XmlElement age = doc.CreateElement("Age");
                
                age.InnerText = $"{rdm.Next(12, 19)}";
                
                element.AppendChild(age);
                
                //创建当前元素到根目录下
                root.AppendChild(element);
            }
            doc.Save(@"D:\dwang\myxml.xml");
        }
    }
}

.5.读取xml文档demo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace _2.读取x_m_l
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 1;
            string path = $@"D:\dwang\myxml{i}.xml";
            XmlDocument doc = new XmlDocument();
            doc.Load(path);

            //获取根节点
            XmlElement root = doc.DocumentElement;

            //获取子节点(XmlNode是xmlElement,xmlComment的父类)
            foreach (XmlNode student in root.ChildNodes)
            {
                //忽略xml文件中的注释节点(XmlComment)
                if (student as XmlElement == null)
                    continue;
                Console.Write($"{student.Name}--{((XmlElement)student).GetAttribute("name")}");
                foreach (XmlElement subnode in student.ChildNodes)
                {
                    Console.Write($"--{subnode.Name}--{subnode.InnerText}");
                }
                Console.Write("\r\n");
            }
            Console.ReadKey();
        }
    }
}

6.修改xml文档的demo,包括更新节点,添加节点,删除节点等.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _3.修改xml
{
    class Program
    {
        static void Main(string[] args)
        {
            //添加节点,修改节点,删除节点
            XmlDocument doc = new XmlDocument();

            //加载xml文档
            string path = $@"D:\dwang\myxml1.xml";
            doc.Load(path);

            //获取根节点
            XmlElement root = doc.DocumentElement;

            //获取根节点名称
            string name_RootNode = root.Name;

            //添加节点
            XmlElement newStudent = doc.CreateElement("newStuent");
            //设置newStuent元素的属性
            newStudent.SetAttribute("ID", "888");
            
            //添加newStuent元素的子节点name,age
            XmlElement name = doc.CreateElement("name");
            name.InnerText = "newstuentName";
            newStudent.AppendChild(name);
            XmlElement age = doc.CreateElement("age");
            age.InnerText = "68";
            newStudent.AppendChild(age);

            //将新学生元素添加到根节点最后一个子元素后面
            root.InsertAfter(newStudent, root.ChildNodes[root.ChildNodes.Count-1]);

            //删除指定的节点两种常用方式(XPath)
            //删除指定的节点两种常用方式(XPath)
            //方式1
            XmlNode node1 = doc.SelectSingleNode(@"/Root/学生1");//注意节点的大小写,否则会找不到节点
            XmlNode node1_parent = node1?.ParentNode;
            node1_parent?.RemoveChild(node1);//获取指定的节点后,要用该节点的父节点对象删除该节点
            //方式2
            XmlNode node = root.SelectSingleNode("//学生2");
            if(node != null)
                root?.RemoveChild(node);
            
            //更新xml节点信息
            //获取指定节点元素
            XmlElement student3 = doc.SelectSingleNode(@"/Root/学生3") as XmlElement;

            //更新ID属性值
            student3?.SetAttribute("ID", "000001");

            //设置当前节点的指定子节点的innerText
            if (student3 != null)
            {
                student3["Age"].InnerText = "28";
                student3["name"].InnerText = "Student--3";
            }
            //保存xml文档
            doc.Save(path);
        }
    }
}


原文地址:https://blog.csdn.net/weixin_44279482/article/details/137266257

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!