-
View Code
1 01.class Program 2 02. { 3 03. static void Main(string[] args) 4 04. { 5 05. XMLOperation xmlOpr = new XMLOperation(); 6 06. XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2"); 7 07. string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText; 8 08. string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText; 9 09. string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText; 10 10. Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel); 11 11. Console.Read(); 12 12. } 13 13. }
- XmlDocumentSelectNodes方法的使用
- 通过节点属性查找指定节点
假设xml文件内容是:
1 <?xml version="1.0" encoding="utf-8"?>
2 <Workflow>
3 <Activity>
4 <ActivityId>1</ActivityId>
5 <ActivityName>start</ActivityName>
6 <BindingPageId>1</BindingPageId>
7 <BindingRoleId>1</BindingRoleId>
8 <ActivityLevel>1</ActivityLevel>
9 </Activity>
10 <Activity>
11 <ActivityId>2</ActivityId>
12 <ActivityName>pass</ActivityName>
13 <BindingPageId>2</BindingPageId>
14 <BindingRoleId>2</BindingRoleId>
15 <ActivityLevel>2</ActivityLevel>
16 </Activity>
17 </Workflow>
我们需要读取Activity节点下的内容,因为存在多个Activity,所以需要读取多个节点。可以使用 XmlDocument.SelectSingleNode和XmlDocument.SelectNodes方法查找节点。前一个是查找匹配的第一个节点,而后一个则会返回一个节点列表。
1.XmlDocument.SelectSingleNode方法的使用
首先创建一个读取xml文件的方法ReadXmlNode
1 01./// <summary>
2 02. /// 读取xml中的指定节点的值
3 03. /// </summary>
4 04. public void ReadXmlNode(string filename)
5 05. {
6 06. XmlDocument xmlDoc = new XmlDocument();
7 07. try
8 08. {
9 09. xmlDoc.Load(filename);
10 10. //读取Activity节点下的数据。SelectSingleNode匹配第一个Activity节点
11 11. XmlNode root = xmlDoc.SelectSingleNode("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取
12 12. if (root != null)
13 13. {
14 14. string ActivityId = (root.SelectSingleNode("ActivityId")).InnerText;
15 15. string ActivityName = (root.SelectSingleNode("ActivityName ")).InnerText;
16 16. string ActivityLevel = root.SelectSingleNode("ActivityLevel").InnerText;
17 17. Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
18 18. }
19 19. else
20 20. {
21 21. Console.WriteLine("the node is not existed");
22 22. //Console.Read();
23 23. }
24 24. }
25 25. catch (Exception e)
26 26. {
27 27. //显示错误信息
28 28. Console.WriteLine(e.Message);
29 29. }
30 30. }
然后在主函数中调用该方法
1 01.class Program
2 02. {
3 03. static void Main(string[] args)
4 04. {
5 05. XMLOperation xmlOpr = new XMLOperation();
6 06. xmlOpr.ReadXmlNodes("activity.xml");
7 07. Console.Read();
8 08. }
9 09. }
输出结果为:
共有2个节点 ActivityId: 1 ActivityName: start ActivityLevel: 1 ActivityId: 2 ActivityName: pass ActivityLevel: 2
3.通过节点属性查找指定节点
参考http://www.csharp-examples.net/xml-nodes-by-attribute-value/,虽然没有用到参考文章中的方法,不过总觉得以后会用到的。
1 01./// <summary>
2 02. ///通过ActivityLevel获取xmlnode,需要保证ActivityLevel在一个xml文档中是唯一的。
3 03. /// </summary>
4 04. public XmlNode getXmlNode(string filename, string activitylevel)
5 05. {
6 06. XmlDocument xmlDoc = new XmlDocument();
7 07. try
8 08. {
9 09. xmlDoc.Load(filename);
10 10. XmlNodeList xnList = xmlDoc.SelectNodes("//Activity");//当节点Workflow带有属性是,使用SelectSingleNode无法读取
11 11. foreach (XmlNode xn in xnList)
12 12. {
13 13. string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
14 14. if(activitylevel==ActivityLevel)
15 15. {
16 16. return xn;
17 17. }
18 18. }
19 19. }
20 20. catch (Exception e)
21 21. {
22 22. //显示错误信息
23 23. Console.WriteLine(e.Message);
24 24. }
25 25. return null;
26 26. }
然后在主函数中调用该方法
1 01.class Program
2 02. {
3 03. static void Main(string[] args)
4 04. {
5 05. XMLOperation xmlOpr = new XMLOperation();
6 06. XmlNode xn=xmlOpr.getXmlNode("activity.xml", "2");
7 07. string ActivityId = (xn.SelectSingleNode("ActivityId")).InnerText;
8 08. string ActivityName = (xn.SelectSingleNode("ActivityName ")).InnerText;
9 09. string ActivityLevel = xn.SelectSingleNode("ActivityLevel").InnerText;
10 10. Console.WriteLine("ActivityId:" + ActivityId + "/nActivityName:" + ActivityName + "/nActivityLevel:" + ActivityLevel);
11 11. Console.Read();
12 12. }
13 13. }
输出结果为:
ActivityId:2 ActivityName:pass ActivityLevel:2