C# XML文件的读写操作

时间:2025-03-12 07:07:52

C# XML文件的读写操作

XML(可扩展标记语言)
定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

一、创建xml文件

private void Creat()
        {
            XmlTextWriter writer = new XmlTextWriter("", System.Text.Encoding.UTF8);

            //使用自动缩进便于阅读
            writer.Formatting = Formatting.Indented;

            //XML声明
            writer.WriteStartDocument();

            //书写根元素
            writer.WriteStartElement("Root");

            //开始一个元素
            writer.WriteStartElement("Item");

            //向先前创建的元素中添加一个属性
            writer.WriteAttributeString("Id", "1");

            //添加子元素 ("title", "表单");
            writer.WriteElementString("Value", "100");
            writer.WriteElementString("Value", "200");

            //关闭item元素
            writer.WriteEndElement(); // 关闭元素

            //在节点间添加一些空
            writer.Close();
        }

执行后生成文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Item Id="1">
    <Value>100</Value>
    <Value>200</Value>
  </Item>
</Root>

二、读取节点内容

private void Read()
        {
            // 1.创建一个XmlDocument类的对象
            XmlDocument doc = new XmlDocument();

            // 2.把你想要读取的xml文档加载进来
            doc.Load("");

            // 3.读取你指定的节点,注意这是个节点集合类型
            XmlNodeList lis = doc.GetElementsByTagName("Value");

            // 4.取节点中的值
            String str = lis[0].InnerText;

            // 5.显示节点中的值
            MessageBox.Show(str);
        }

三、插入新节点

private void Insert()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("");
            XmlNode root = xmlDoc.SelectSingleNode("Root");//查找<Root>
            XmlElement xe1 = xmlDoc.CreateElement("Title");//创建一个<Title>节点
            xe1.SetAttribute("Name", "EasyLife");//设置该节点Name属性
            xe1.SetAttribute("Number", "002");//设置该节点Number属性

            XmlElement xesub1 = xmlDoc.CreateElement("Group");
            xesub1.InnerText = "Hello World";//设置文本节点
            xe1.AppendChild(xesub1);//添加到<book>节点中
            XmlElement xesub2 = xmlDoc.CreateElement("Step");
            xesub2.InnerText = "Hello Body";
            xe1.AppendChild(xesub2);
            
            root.AppendChild(xe1);//添加到<Root>节点中
            xmlDoc.Save("");
        }

运行结果:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Item Id="1">
    <Value>100</Value>
    <Value>200</Value>
  </Item>
  <Title Name="EasyLife" Number="002">
    <Group>Hello World</Group>
    <Step>Hello Body</Step>
  </Title>
</Root>

四、修改节点或者属性

private void Modify()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("");
            XmlNodeList nodeList = xmlDoc.SelectSingleNode("Root").ChildNodes;//获取Root节点的所有子节点
            foreach (XmlNode xn in nodeList)//遍历所有子节点
            {
                XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                if (xe.GetAttribute("Number") == "002")//如果Number属性值为“002”
                {
                    xe.SetAttribute("Number", "0021");//则修改该属性为“0021”

                    XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                    foreach (XmlNode xn1 in nls)//遍历
                    {
                        XmlElement xe2 = (XmlElement)xn1;//转换类型
                        if (xe2.Name == "Group")//如果找到
                        {
                            xe2.InnerText = "Hello Hello";//则修改
                            break;//找到退出来就可以了
                        }
                    }
                    break;
                }
            }
            xmlDoc.Save("");//保存。
        }

运行结果:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Item Id="1">
    <Value>100</Value>
    <Value>200</Value>
  </Item>
  <Title Name="EasyLife" Number="0021">
    <Group>Hello Hello</Group>
    <Step>Hello Body</Step>
  </Title>
</Root>

五、删除节点或者属性

private void Delete()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("");

            XmlNodeList xnl = xmlDoc.SelectSingleNode("Root").ChildNodes;

            foreach (XmlNode xn in xnl)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Number") == "002")
                {
                    xe.RemoveAttribute("Number");//删除Number属性
                }
                else if (xe.GetAttribute("Number") == "0021")
                {
                    xe.RemoveAll();//删除该节点的全部内容
                }
            }
            xmlDoc.Save("");
        }

运行结果:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Item Id="1">
    <Value>100</Value>
    <Value>200</Value>
  </Item>
  <Title>
  </Title>
</Root>

六、显示所有数据

private void Display()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("");

            XmlNode xn = xmlDoc.SelectSingleNode("Root");

            XmlNodeList xnl = xn.ChildNodes;

            foreach (XmlNode xnf in xnl)
            {
                XmlElement xe = (XmlElement)xnf;
                Console.WriteLine(xe.GetAttribute("Number"));//显示属性值
                Console.WriteLine(xe.GetAttribute("Name"));

                XmlNodeList xnf1 = xe.ChildNodes;
                foreach (XmlNode xn2 in xnf1)
                {
                    Console.WriteLine(xn2.InnerText);//显示子节点点文本
                }
            }
        }

简单使用示例:
一、创建xml文件

XmlTextWriter writer = new XmlTextWriter("", System.Text.Encoding.UTF8);
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();
            writer.WriteStartElement("Root");
            writer.WriteEndElement();
            writer.Close();

二、每次写入节点数据

XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("");
            XmlNode root = xmlDoc.SelectSingleNode("Root");
            XmlElement xe1 = xmlDoc.CreateElement("Title");
            xe1.SetAttribute("Name", "EasyLife");
            xe1.SetAttribute("Number", "001");
            root.AppendChild(xe1);
            xmlDoc.Save("");

写入三次数据后的文件

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Item Name="EasyLife" Number="001" />
  <Item Name="EasyLife" Number="001" />
  <Item Name="EasyLife" Number="001" />
</Root>

三、读取数据

XmlDocument doc = new XmlDocument();
            doc.Load("");
            XmlNodeList nodeList = doc.SelectSingleNode("List").ChildNodes;
            foreach (XmlNode xn in nodeList)
            {
                XmlElement xe = (XmlElement)xn;
                Item item = new Item();
                item.Name = xe.GetAttribute("Name");
                item.Number= xe.GetAttribute("Number");
            }