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#代码:
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Xml;
06
07 namespace 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文件节点信息的读取,代码有详细的注解,在此不过多解释。代码如下:
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Xml;
06
07 namespace 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">
  请看如下代码实现方案:
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Xml;
06
07 namespace 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 >
  
  代码如下所示:
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Xml;
06
07 namespace 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文件节点信息(即:将刚刚添加上的节点删除掉)代码如下:
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Xml;
06
07 namespace 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}
  
  运行上段代码之后就可以实现对相应节点的删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值