C#操作xml主要有这么几个对象:XmlDocument、XmlElement、XmlNode

命名空间:

using System.Xml;

知识补充:

XmlNode和XmlElement的区别:

1、Element是一个小范围的定义,必须含有完整信息的节点才能叫做元素。

2、Node是基本对象,Attribute、Element、Text等都是Node的子对象。

一个元素一定是一个节点,而一个节点不一定是元素。

XmlElement与XmlNode之间的继承关系如下:

..::.Object
  System.Xml..::.XmlNode     System.Xml..::.XmlLinkedNode       System.Xml..::.XmlElement

体现在属性和方法中:

XmlNode有属性 - ChildNodes(XmlNodeList类型),而XmlElement则没有

XmlElement有方法 - GetAttribute、SetAttribute()等方法,而XmlNode则没有

(注意:两者都有Attribute属性)

因此,有些时候需要进行两者间的转换,以实现不同的功能。

主要方法以及属性介绍:

CreateElement():创建 XmlElement

有一个参数,两个参数,三个参数三种重载,参数类型均为string

一个参数:CreateElement("元素名称")

两个参数:CreateElement("元素名称","元素的命名空间")

三个参数:CreateElement("元素的前缀","元素的名称","元素的命名空间")

选择匹配 XPath 表达式的第一个 XmlNode

public XmlNode SelectSingleNode(
	string xpath
)

XmlDocument::Save():将 XML 文档保存到指定的位置

XmlDocument::Load():加载指定的 XML 数据

获取文档的根 XmlElement

(6)  XmlElement::SetAttribute():设置具有指定名称的属性的值

相对的有:GetAttribute():获取具有指定名称的属性的值

点添加到该节点的子节点列表的末尾

XmlElement也继承了该方法

“for each”样式迭代的支持。

同样,XmlElement也继承了该方法,所以也可用于"for each"迭代

实例代码:

XML文档的几个简单操作:

最终实现的XML内容如下所示:


其中:

“user”是xml文件的根节点;

两个"person"节点是"user"节点的子节点;

"person"节点有三个属性:"name", "sex", "age";

"pass"和"address"是"person"节点的两个子节点

(1) 增加声明段落:


[csharp]

1. XmlDocument xmldoc = new XmlDocument();  
2. //加入XML的声明段落,<?xmlversion="1.0" encoding="gb2312"?>  
3. XmlDeclaration xmldecl;  
4. xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312", null);  
5. xmldoc.AppendChild(xmldecl);


(2) 加入根元素


[csharp]

1. private void CreateRootElement()  
2. {  
3. new XmlDocument();  
4. "user");  
5.     xmlDoc.AppendChild(xmlelem);  
6.   
7. //保存创建好的XML文档  
8. "User.xml");  
9. }


(3) 装载XML文件


[csharp]

1. //load xml file   
2. private void LoadXml()   
3. {  
4. if (isFileExisted == false)  
5.     {  
6. new XmlDocument();  
7.         CreateRootElement();  
8. true;  
9. return;  
10.     }  
11. new XmlDocument();  
12. "User.xml");  
13. }


(4) 增加新元素

[csharp]

1.  //添加节点   
2. public void AddElement(string name, string sex, string age, string pass, string address)   
3. {  
4. //装载Xml文件  
5.     LoadXml();  
6. //获取根节点  
7. "user");  
8.   
9. //创建元素Person  
10. "person");  
11.   
12. //person节点的三个属性  
13. "name", name);  
14. "sex", sex);  
15. "age", age);  
16.   
17. //创建一个新的元素  
18. "pass");   
19. //设置节点的串联值  
20.     passElement.InnerText = pass;  
21. //将新创建的节点pass添加为person节点的子节点  
22.     personElement.AppendChild(passElement);  
23.   
24. "Address");  
25.     addrElement.InnerText = address;  
26.     personElement.AppendChild(addrElement);  
27.   
28. //添加person节点  
29.     xmldocSelect.AppendChild(personElement);  
30. "user.xml");   
31. }


(5) 输出xml文档内容:

(用了两种遍历方式:XmlNode,XmlElement)


[csharp]

1. //输出xml文档  
2. public void showXml()  
3. {  
4.     LoadXml();  
5. //获取根节点  
6.     XmlElement rootElement = xmlDoc.DocumentElement;  
7.       
8. //挨个查找其下的子节点  
9. foreach (XmlElement childElement in rootElement)  
10.     {  
11. //分别输出子节点属性  
12. "name"));  
13. "sex"));  
14. "age"));  
15.   
16. //获取孙节点列表  
17.         XmlNodeList grandsonNodes = childElement.ChildNodes;  
18. foreach (XmlNode grandsonNode in grandsonNodes)  
19.         {  
20. //显示孙节点文本  
21.             Console.WriteLine(grandsonNode.InnerText);  
22.         }   
23.     }  
24. }


(6) 查找并修改节点

[csharp]

1.  //修改节点   
2. public void UpdateElement(string name)   
3. {   
4.     LoadXml();  
5. //获取根节点的所有子节点   
6. "user").ChildNodes;  
7.       
8. foreach(XmlNode childNode in nodeList)  
9.     {  
10.         XmlElement childElement = (XmlElement)childNode;  
11.   
12. //如果找到姓名为name的节点  
13. if (childElement.GetAttribute("name") == name)   
14.         {   
15. "name","BYH");   
16.               
17. //如果下面有子节点在下走   
18.             XmlNodeList grandsonNodes = childElement.ChildNodes;  
19. //继续获取xe子节点的所有子节点   
20. foreach (XmlNode grandsonNode in grandsonNodes)  
21.             {  
22.                 XmlElement grandsonElement = (XmlElement)grandsonNode;  
23. //如果找到节点名为pass的孙子节点  
24. if (grandsonElement.Name == "pass")  
25.                 {  
26. "66666";  
27. break;   
28.                 }   
29.             }   
30. break;   
31.         }   
32.     }   
33. "user.xml");  
34. }


(7) 查找并删除节点

[csharp]

1. public void deleteNode(string name)   
2. {   
3.     LoadXml();   
4. //获取根节点的所有子节点  
5. "user").ChildNodes;  
6.   
7. foreach (XmlNode childNode in childNodes)  
8.     {  
9.         XmlElement childElement = (XmlElement)childNode;  
10. if (childElement.GetAttribute("name") == name)   
11.         {  
12. //删除name属性   
13. "name");  
14. //删除该节点的全部内容  
15.             childElement.RemoveAll();  
16.               
17. break;  
18.         }   
19.     }  
20.   
21. "user.xml");  
22. }