HOW TO:使用 Visual C# .NET 从文件中读取 XML
文章编号
:307548最后修改
:2004年8月13日修订
:1.0本文的发布号曾为 CHS307548
本页
概要
本文描述如何使用 XmlTextReader 类从文件读取可扩展标记语言 (XML)。 XmlTextReader 可对 XML 直接进行语法分析和标记,并且实施了 XML 1.0 规范以及 WWW 联合会 (W3C) XML 规范中的名称空间。 本文提供了对 XML 的快速、标记化流访问,而不是使用 XML 文档对象模型 (DOM) 等对象模型。
要求
下表概括了推荐使用的硬件、软件、网络架构以及所需的 Service Pack:
•
Microsoft Visual Studio .NET本文假定您熟悉下列主题:
•
XML 术语•
创建和读取 XML 文件
如何从文件读取 XML
本示例使用一个名为 Books.xml 的文件。您可以创建自己的 Books.xml 文件,或者使用以下文件夹中 .NET 软件开发工具包 (SDK) 快速入门包括的示例文件。
\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
必须将 Books.xml 文件复制到 \Bin\Debug 文件夹中,该文件夹位于创建此项目所在文件夹的下面。也可以下载 Books.xml;有关下载位置,请参阅部分。
1.
打开 Visual Studio .NET。2.
新建 Visual C# .NET 控制台应用程序。 您可以直接阅读一节,或者继续执行以下步骤生成应用程序。3.
确保项目包含了对 System.Xml.dll 程序集的引用。4.
在 System.Xml 名称空间上指定 using 指令,这样,以后就不需要在代码中限定 XmlTextReader 声明了。using 指令必须位于任何其他声明之前。
using System.Xml;
5.
创建一个 XmlTextReader 对象的实例,并使用 XML 文件填充该实例。 通常,如果需要将 XML 作为原始数据来访问而不产生 DOM 开销,则使用 XmlTextReader 类;因此,XmlTextReader 类提供了一种更快速读取 XML 的机制。XmlTextReader 类使用不同的构造函数来指定 XML 数据的位置。 以下代码创建一个 XmlTextReader 对象的实例,并加载 Books.xml 文件。 将以下代码添加到 Class1 的 Main 过程中:
XmlTextReader reader = new XmlTextReader ("books.xml");
6.
读取全部 XML 数据。 (注意,此步骤演示了一个外部“while”循环,并在下两个步骤中演示如何使用该循环来读取 XML。) 在创建 XmlTextReader 对象后,请使用 Read 方法读取 XML 数据。 Read 方法继续顺序读取 XML 文件直至到达文件结尾,此时 Read 方法返回“False”值。
while (reader.Read()) {// Do some work here on the data. Console.WriteLine(reader.Name);}Console.ReadLine();
7.
检查节点。若要处理 XML 数据,每个记录都应该有一个可通过 NodeType 属性进行确定的节点类型。Name 和 Value 属性返回当前节点(或记录)的节点名(元素和属性名)和节点值(节点文本)。NodeType 枚举确定节点类型。下面的代码示例显示了元素的名称和文档类型。 注意,此示例忽略了元素属性。
while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element.Console.Write("<" + reader.Name);Console.WriteLine(">"); break; case XmlNodeType.Text: //Display the text in each element. Console.WriteLine (reader.Value); break; case XmlNodeType. EndElement: //Display the end of the element.Console.Write(" "); break; }}
8.
检查属性。元素节点类型可包括一系列与其关联的属性节点。MovetoNextAttribute 方法连续在元素的每个属性中移动。使用 HasAttributes 属性检测节点是否有任何属性。AttributeCount 属性返回当前节点的属性个数。
while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element.Console.Write("<" + reader.Name); while (reader.MoveToNextAttribute()) // Read the attributes. Console.Write(" " + reader.Name + "='" + reader.Value + "'"); Console.Write(">");Console.WriteLine(">"); break; case XmlNodeType.Text: //Display the text in each element. Console.WriteLine (reader.Value); break; case XmlNodeType. EndElement: //Display the end of the element.Console.Write(" "); break; }}
9.
保存并关闭项目。
完整代码列表
using System;using System.Xml;namespace ReadXMLfromFile{////// Summary description for Class1./// class Class1 { static void Main(string[] args) { XmlTextReader reader = new XmlTextReader ("books.xml"); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: // The node is an element.Console.Write("<" + reader.Name);Console.WriteLine(">"); break; case XmlNodeType.Text: //Display the text in each element. Console.WriteLine (reader.Value); break; case XmlNodeType.EndElement: //Display the end of the element.Console.Write(" "); break; } }Console.ReadLine(); } }}
示例输出
The Autobiography of Benjamin Franklin Benjamin Franklin 8.99 The Confidence Man Herman Melville 11.99 The Gorgias Plato 9.99
参考
下列文件可从 Microsoft 下载中心下载:
(http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)
有关详细信息,请参阅“XML in .NET:.NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation”(.NET 中的 XML:.NET 框架 XML 类和 C# 提供了简单、可缩放的数据操作)一文,这篇文章在 MSDN Magazine 中,可从下面的 Microsoft Web 站点访问:
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/xml0101.asp)
有关 XmlReader 类的更多信息,请访问下面的 .NET 框架类库 Web 站点:
(http://msdn.microsoft.com/library/dotnet/cpref/frlrfsystemxmlxmlreaderclasstopic.htm)
有关如何使用 XmlReader 读取 XML 数据的更多信息,请参阅下面的 Microsoft .NET 框架开发人员指南文档:
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconreadingxmldatausingxmlreader.asp)
Source: