C# 实现对XML的基本操作(创建xml文件,增、删、改、查 xml节点信息)

 XML文件在存储、交换和传输数据信息上有着很方便处理,那么今天这篇文章主要讲一下用C#如何实现对XML文件的基本操作,如:创建xml文件,增、删、改、查xml的节点信息。所使用的方法很基础,方便易懂。

  本文的主要模块为:

    ① :生成xml文件

    ② :遍历xml文件的节点信息

    ③ :修改xml文件的节点信息

    ④ :向xml文件添加节点信息

    ⑤ :删除指定xml文件的节点信息


  • 假设我们需要设计出这样的一个xml文件来存储相应的信息,如下所示:

 

<Computers>
  <Computer ID="11111111" Description="Made in China">
    <name>Lenovo</name>
    <price>5000</price>
  </Computer>
  <Computer ID="2222222" Description="Made in USA">
    <name>IBM</name>
    <price>10000</price>
  </Computer>
</Computers>
  生成这样的一个xml文件请看下述C#代码:
    
    
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Text;
05using System.Xml;
06  
07namespace OperateXML
08{
09    class Program
10    {
11        static void Main(string[] args)
12        {
13            try
14            {
15                //xml文件存储路径
16                string myXMLFilePath = "E://MyComputers.xml";
17                //生成xml文件
18                GenerateXMLFile(myXMLFilePath);
19            }
20            catch (Exception ex)
21            {
22                Console.WriteLine(ex.ToString());
23            }
24        }
25  
26        private static void GenerateXMLFile(string xmlFilePath)
27        {
28            try
29            {
30                //初始化一个xml实例
31                XmlDocument myXmlDoc = new XmlDocument();
32                //创建xml的根节点
33                XmlElement rootElement = myXmlDoc.CreateElement("Computers");
34                //将根节点加入到xml文件中(AppendChild)
35                myXmlDoc.AppendChild(rootElement);
36  
37                //初始化第一层的第一个子节点
38                XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");
39                //填充第一层的第一个子节点的属性值(SetAttribute)
40                firstLevelElement1.SetAttribute("ID", "11111111");
41                firstLevelElement1.SetAttribute("Description", "Made in China");
42                //将第一层的第一个子节点加入到根节点下
43                rootElement.AppendChild(firstLevelElement1);
44                //初始化第二层的第一个子节点
45                XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");
46                //填充第二层的第一个子节点的值(InnerText)
47                secondLevelElement11.InnerText = "Lenovo";
48                firstLevelElement1.AppendChild(secondLevelElement11);
49                XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");
50                secondLevelElement12.InnerText = "5000";
51                firstLevelElement1.AppendChild(secondLevelElement12);
52  
53  
54                XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");
55                firstLevelElement2.SetAttribute("ID", "2222222");
56                firstLevelElement2.SetAttribute("Description", "Made in USA");
57                rootElement.AppendChild(firstLevelElement2);
58                XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");
59                secondLevelElement21.InnerText = "IBM";
60                firstLevelElement2.AppendChild(secondLevelElement21);
61                XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");
62                secondLevelElement22.InnerText = "10000";
63                firstLevelElement2.AppendChild(secondLevelElement22);
64  
65                //将xml文件保存到指定的路径下
66                myXmlDoc.Save(xmlFilePath);
67            }
68            catch (Exception ex)
69            {
70                Console.WriteLine(ex.ToString());
71            }
72        }
73    }
74}

 

  运行这样一段代码就可以在E盘中生成相应的xml文件Computers.xml,这个方法显得比较笨拙,但是很实在,基础好用~~

  • 知道怎么生成xml文件之后,下一步就要了解:如何读取xml文件(即:遍历xml文件的节点信息)
  下面的这段代码实现了对xml文件节点信息的读取,代码有详细的注解,在此不过多解释。代码如下:
    
    
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Text;
05using System.Xml;
06  
07namespace OperateXML
08{
09    class Program
10    {
11        static void Main(string[] args)
12        {
13            try
14            {
15                //xml文件存储路径
16                string myXMLFilePath = "E://MyComputers.xml";
17                //遍历xml文件的信息
18                GetXMLInformation(myXMLFilePath);
19            }
20            catch (Exception ex)
21            {
22                Console.WriteLine(ex.ToString());
23            }
24        }
25  
26        private static void GetXMLInformation(string xmlFilePath)
27        {
28            try
29            {
30                //初始化一个xml实例
31                XmlDocument myXmlDoc = new XmlDocument();
32                //加载xml文件(参数为xml文件的路径)
33                myXmlDoc.Load(xmlFilePath);
34                //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
35                XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");
36                //分别获得该节点的InnerXml和OuterXml信息
37                string innerXmlInfo = rootNode.InnerXml.ToString();
38                string outerXmlInfo = rootNode.OuterXml.ToString();
39                //获得该节点的子节点(即:该节点的第一层子节点)
40                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
41                foreach (XmlNode node in firstLevelNodeList)
42                {
43                    //获得该节点的属性集合
44                    XmlAttributeCollection attributeCol = node.Attributes;
45                    foreach (XmlAttribute attri in attributeCol)
46                    {
47                        //获取属性名称与属性值
48                        string name = attri.Name;
49                        string value = attri.Value;
50                        Console.WriteLine("{0} = {1}", name, value);
51                    }
52  
53                    //判断此节点是否还有子节点
54                    if (node.HasChildNodes)
55                    {
56                        //获取该节点的第一个子节点
57                        XmlNode secondLevelNode1 = node.FirstChild;
58                        //获取该节点的名字
59                        string name = secondLevelNode1.Name;
60                        //获取该节点的值(即:InnerText)
61                        string innerText = secondLevelNode1.InnerText;
62                        Console.WriteLine("{0} = {1}", name, innerText);
63  
64                        //获取该节点的第二个子节点(用数组下标获取)
65                        XmlNode secondLevelNode2 = node.ChildNodes[1];
66                        name = secondLevelNode2.Name;
67                        innerText = secondLevelNode2.InnerText;
68                        Console.WriteLine("{0} = {1}", name, innerText);
69                    }
70                }
71            }
72            catch (Exception ex)
73            {
74                Console.WriteLine(ex.ToString());
75            }
76        }
77    }
78}

  这里要强调一点:XmlElement是XmlNode的继承,所以XmlElement可以调用更加多的方法,实现相应的功能。

  • 接下来要实现对xml文件节点信息的修改
  假设我们要修改上面刚刚生成的xml文件的<Computer ID="2222222" Description="Made in USA">这条信息
                改成<Computer ID="2222222" Description="Made in HongKong">
  请看如下代码实现方案:
  
  
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Text;
05using System.Xml;
06  
07namespace OperateXML
08{
09    class Program
10    {
11        static void Main(string[] args)
12        {
13            try
14            {
15                //xml文件存储路径
16                string myXMLFilePath = "E://MyComputers.xml";
17                //修改xml文件的节点信息
18                ModifyXmlInformation(myXMLFilePath);
19            }
20            catch (Exception ex)
21            {
22                Console.WriteLine(ex.ToString());
23            }
24        }
25  
26        private static void ModifyXmlInformation(string xmlFilePath)
27        {
28            try
29            {
30                XmlDocument myXmlDoc = new XmlDocument();
31                myXmlDoc.Load(xmlFilePath);
32                XmlNode rootNode = myXmlDoc.FirstChild;
33                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
34                foreach (XmlNode node in firstLevelNodeList)
35                {
36                    //修改此节点的属性值
37                    if (node.Attributes["Description"].Value.Equals("Made in USA", StringComparison.InvariantCultureIgnoreCase))
38                    {
39                        node.Attributes["Description"].Value = "Made in HongKong";
40                    }
41                }
42                //要想使对xml文件所做的修改生效,必须执行以下Save方法
43                myXmlDoc.Save(xmlFilePath);
44            }
45            catch (Exception ex)
46            {
47                Console.WriteLine(ex.ToString());
48            }
49  
50        }
51  
52    }
53}

  运行上面这段代码,就可以实现预期的更改,代码很好理解,在此不过多啰嗦。

  • 下面实现向xml文件中的相应位置插入节点信息
  假设我们想通过插入节点将原来的xml文件结构变成如下所示

  
  
  < Computers >
  < Computer ID =" 11111111 " Description =" Made in China " >
       < name > Lenovo </ name >
     < price > 5000 </ price >
       < color IsMixed =" Yes " > black </ color >
  </ Computer >
   < Computer ID =" 2222222 " Description =" Made in USA " >
       < name > IBM </ name >
     < price > 10000 </ price >
     < color IsMixed =" Yes " > black </ color >
  </ Computer >
   </ Computers >
  
  代码如下所示:
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Text;
05using System.Xml;
06  
07namespace OperateXML
08{
09    class Program
10    {
11        static void Main(string[] args)
12        {
13            try
14            {
15                //xml文件存储路径
16                string myXMLFilePath = "E://MyComputers.xml";
17                //向xml文件添加节点信息
18                AddXmlInformation(myXMLFilePath);
19            }
20            catch (Exception ex)
21            {
22                Console.WriteLine(ex.ToString());
23            }
24        }
25  
26        private static void AddXmlInformation(string xmlFilePath)
27        {
28            try
29            {
30                XmlDocument myXmlDoc = new XmlDocument();
31                myXmlDoc.Load(xmlFilePath);
32                //添加一个带有属性的节点信息
33                foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
34                {
35                    XmlElement newElement = myXmlDoc.CreateElement("color");
36                    newElement.InnerText = "black";
37                    newElement.SetAttribute("IsMixed", "Yes");
38                    node.AppendChild(newElement);
39                }
40                //保存更改
41                myXmlDoc.Save(xmlFilePath);
42            }
43            catch (Exception ex)
44            {
45                Console.WriteLine(ex.ToString());
46            }
47        }
48  
49    }
50}

  
  • 下面实现删除指定xml文件节点信息(即:将刚刚添加上的节点删除掉)代码如下:
01using System;
02using System.Collections.Generic;
03using System.Linq;
04using System.Text;
05using System.Xml;
06  
07namespace OperateXML
08{
09    class Program
10    {
11        static void Main(string[] args)
12        {
13            try
14            {
15                //xml文件存储路径
16                string myXMLFilePath = "E://MyComputers.xml";
17                //删除xml文件节点信息
18                DeleteXmlInformation(myXMLFilePath);
19            }
20            catch (Exception ex)
21            {
22                Console.WriteLine(ex.ToString());
23            }
24        }
25  
26        private static void DeleteXmlInformation(string xmlFilePath)
27        {
28            try
29            {
30                XmlDocument myXmlDoc = new XmlDocument();
31                myXmlDoc.Load(xmlFilePath);
32                foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
33                {
34                    //记录该节点下的最后一个子节点(简称:最后子节点)
35                    XmlNode lastNode = node.LastChild;
36                    //删除最后子节点下的左右子节点
37                    lastNode.RemoveAll();
38                    //删除最后子节点
39                    node.RemoveChild(lastNode);
40                }
41                //保存对xml文件所做的修改
42                myXmlDoc.Save(xmlFilePath);
43            }
44            catch (Exception ex)
45            {
46                Console.WriteLine(ex.ToString());
47            }
48        }
49  
50    }
51}
  
  运行上段代码之后就可以实现对相应节点的删除。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
回答: 在C#中,我们可以使用XmlReader和XmlDocument类来对XML文件进行操作。 使用XmlReader类,可以按顺序读取XML文件的内容,并执行相应的操作。首先,我们需要创建一个XmlReaderSettings对象,并设置一些选项,比如忽略空白和注释。然后,使用XmlReader.Create方法创建一个XmlReader实例,并传入文件路径和XmlReaderSettings对象。接下来,可以使用while循环和Read方法来遍历XML文件节点,并执行相应的操作。\[1\] 使用XmlDocument类,可以加载整个XML文件,并使用XPath表达式来选择和操作XML节点。首先,我们需要实例化一个XmlDocument对象,并使用Load方法加载XML文件文件路径为绝对路径。然后,可以使用SelectSingleNode方法和XPath表达式来选择特定的节点。如果需要选择节点的子节点,可以使用ChildNodes属性将子节点集合成一个列表。\[2\] 下面是一个XML文件的示例: <bookstore> <book category="CHILDREN"> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> 使用C#XML文件进行操作,可以根据具体需求选择使用XmlReader或XmlDocument类。 #### 引用[.reference_title] - *1* *2* *3* [C#解析XML文件](https://blog.csdn.net/simplenthpower/article/details/128669633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值