17.2.1 用XmlReader读取XML数据(2)
如示例代码17-2所示,ReadXmlWithReader()方法演示通过XmlReader类读取示例代码17-1所示的UserList.xml数据。首先,通过XmlReader.Create()方法创建一个XmlReader对象reader,然后,通过reader.Read()方法不断在文件前方读取一个结点,直到文件结束(reader.EOF为True)。对于每个结点通过NodeType属性判断它的类型,如果是Element,则根据Name属性判断是哪个结点,并打印出结点的信息。
示例代码17-2
1.static void ReadXmlWithReader( )
2.{
3. //用指定文件创建XmlReader对象,用于读取XML数据
4. XmlReader reader = XmlReader.Create(@"UserList.XML");
5. //一直读取,直到文件结束
6. while (!reader.EOF)
7. {
8. reader.Read( ); //向前读取一个结点
9. if (reader.NodeType == XmlNodeType.Element)
10. {
11. switch (https://www.wendangku.net/doc/bc18600022.html,)
12. {
13. case "UserList":
14. System.Console.Write("用户列表,");
15. reader.MoveToAttribute("Count");
16. System.Console.WriteLine("有{0}个用户:", reader.
17. ReadContentAsInt( ));
18. break;
19. case "User":
20. reader.MoveToAttribute("ID");
21. System.Console.Write("编号:{0}, ", reader.
22. ReadContentAsString());
23. break;
24. case "Name":
25. System.Console.Write("姓名:{0}, ", reader.
26. ReadElementContentAsString( ));
27. break;
28. case "Age":
29. System.Console.Write("年龄:{0}, ", reader.
30. ReadElementContentAsInt( ));
31. break;
32. case "XingBie":
33. System.Console.Write("性别:{0}, ", reader.
34. ReadElementContentAsString( ));
35. break;
36. case "Telphone":
37. System.Console.Write("电话:{0}, ", reader.
38. ReadElementContentAsString( ));
39. break;
40. case "Email":
41. System.Console.WriteLine("邮箱:{0}", reader.
42. ReadElementContentAsString( ));
43. break;
44. default:
45. break;
46. }
47. }
48. }
49. reader.Close( );
50.}
示例代码17-2的输出如下,从中可以看出,通过XmlReader.Read()可以读取任何XML数据,而且可以将数据按照指定的类型读入。
1.用户列表,有3个用户:
2.编号:1, 姓名:张三, 年龄:18, 性别:男,
电话:131********, 邮箱:zhangsan@https://www.wendangku.net/doc/bc18600022.html,
3.编号:2, 姓名:李四, 年龄:25, 性别:男,
电话:131********, 邮箱:lisi@https://www.wendangku.net/doc/bc18600022.html,
4.编号:3, 姓名:黄花, 年龄:22, 性别:女,
电话:131********, 邮箱:huanghua@https://www.wendangku.net/doc/bc18600022.html,
技巧:在XmlReader第一次创建之后,必需先调用XmlReader.Read()方法获得第一个结点,然后才开始访问该结点的内容。