HOW TO:使用 Visual C# .NET 从文件中读取 XML

转载 2012年03月26日 14:36:25

本文描述如何使用 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("</" + reader.Name);
Console.WriteLine(">");
            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("</" + reader.Name);
Console.WriteLine(">");
            break;
    }
}
    9. 保存并关闭项目。

完整代码列表

using System;
using System.Xml;

namespace ReadXMLfromFile
{
/// <summary>
    /// Summary description for Class1.
/// </summary>
    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("</" + reader.Name);
Console.WriteLine(">");
                        break;
                }
            }
Console.ReadLine();
        }
    }
}

示例输出

<bookstore>
<book>
<title>
The Autobiography of Benjamin Franklin
</title>
<author>
<first-name>
Benjamin
</first-name>
<last-name>
Franklin
</last-name>
</author>
<price>
8.99
</price>
</book>
<book>
<title>
The Confidence Man
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>

参考

下列文件可从 Microsoft 下载中心下载:
有关详细信息,请参阅“XML in .NET:.NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation”(.NET 中的 XML:.NET 框架 XML 类和 C# 提供了简单、可缩放的数据操作)一文,这篇文章在 MSDN Magazine 中,可从下面的 Microsoft Web 站点访问: 有关 XmlReader 类的更多信息,请访问下面的 .NET 框架类库 Web 站点: 有关如何使用 XmlReader 读取 XML 数据的更多信息,请参阅下面的 Microsoft .NET 框架开发人员指南文档: 本篇文章中的信息适用于:

Microsoft Visual C# .NET 2002 标准版


HOW TO:使用 Visual C# .NET 打印 RichTextBox 控件的内容

概要本分步指南介绍了如何打印 RichTextBox 控件的内容。RichTextBox 控件没有提供任何打印 RichTextBox 内容的方法。您可以扩展 RichTextBox 类以使用 EM_...

HOW TO:使用 GetOleDbSchemaTable 和 Visual C# .NET 检索架构信息

本文的发布号曾为 CHS309681 展开全部 | 关闭全部 本页 概要 要求 OleDbConnection 对象的 GetOleDbSchemaTab...

HOW TO:在 Visual C# .NET 中设置窗口挂钩

本文以鼠标挂钩为例,介绍如何设置特定于某个线程的挂钩和特定于某个挂钩过程的挂钩。您可以使用挂钩监视特定类型的事件。您可以将这些事件作为一个调用线程与一个特定的线程或同一桌面中的所有的线程关联起来。 ...

使用 System.Xml.XmlDocument 类可在 Visual C#.net 中执行 XPath 查询

本分步指南介绍了如何通过使用 SelectNodes 和 SelectSingleNode如下 类的方法中执行 XPath 查询。 System.Xml.XmlDocument 类实现为.net...

如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页?

DataGrid Web 控件有内置的自动或自定义分页功能,而 DataGrid Windows 控件则没有。本文演示了如何为 DataGrid Windows 控件创建简单的分页机制。 本文...

使用 GetOleDbSchemaTable 和 Visual C# .NET 检索架构信息-----http://support.microsoft.com/kb/309681/zh-cn#

本文演示如何用 ADO.NET 中 OleDbConnection 对象的 GetOleDbSchemaTable 方法检索数据库架构信息。数据源中的架构信息包括数据库或可通过数据库中的数据源、表和...

使用 Visual C# .NET 使 UserControl 成为设计时控件容器

本分步指南介绍在将 UserControl 放在 Windows 窗体上之后,如何将 UserControl 对象用作设计时控件容器。可能会有这样的情况:您想将一个控件拖到 UserControl ...

How to create a File-Compare function in Visual C#

 This article is from Microsoft Support. The orignal article is on http://support.microsoft.com/kb/3...

HOW TO:在 Visual C# 中直接将一个图片从数据库复制到 PictureBox 控件

示例 使用以下结构创建一个 SQL Server 或 Access 表: CREATE TABLE BLOBTest ( BLOBID INT IDENTITY NOT NULL, B...

How to draw a rubber band rectangle or a focus rectangle in Visual C#

A rubber band or focus rectangle is a rectangle that tracks with the mouse pointer while you hold do...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HOW TO:使用 Visual C# .NET 从文件中读取 XML
举报原因:
原因补充:

(最多只允许输入30个字)