文章编号: 307548 - 查看本文应用于的产品
本文的发布号曾为 CHS307548
展开全部 | 关闭全部

本文内容

概要

本文介绍如何使用XmlTextReader类可以从文件中读取可扩展标记语言 (XML)。XmlTextReader提供了直接的分析以及将拆分为标记的 XML 和实现在 XML 1.0 规范,以及从万维网联合会 (W3C) XML 规范中的命名空间。这篇文章提供对 XML (而非使用对象模型 (如 XML 文档对象模型 (DOM) 快速、 标记化流访问。

要求

下面的列表列出了推荐使用的硬件、 软件、 网络基础结构和所需的服务包:
  • Microsoft Visual Studio 2005年或 Microsoft Visual Studio.NET
本文假定您熟悉下列主题:
  • XML 术语
  • 创建和读取 XML 文件

如何从文件中读取 XML

此示例使用一个名为 Books.xml 文件。可以创建您自己的 Books.xml 文件,也可以使用所包含的以下文件夹中.NET 软件开发工具包 (SDK) 快速入门示例文件:
Visual Studio.NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs \Program Files\Microsoft
您必须将 books.xml 复制到 \Bin\Debug 文件夹位于要在其中创建该项目的文件夹。Books.xml 也是可供下载。请参阅"引用"部分中的下载位置。
  1. 开始 Visual Studio 2005年或 Visual Studio.NET。
  2. 创建一个新 Visual C# 控制台应用程序。请您直接转到"完整的代码列表"一节,或者继续执行这些步骤以生成应用程序。
  3. 请确保该项目包含System.Xml.dll程序集的引用。
  4. 这样您不需要限定XmlTextReader声明以后在代码中的指定System.Xml命名空间的using指令。您必须使用using指令任何其他声明之前。
    using System.Xml;
    					
  5. 创建XmlTextReader对象的实例,其中填充的 XML 文件。如果您需要访问 XML 作为原始数据无需开销 DOM ; 通常情况下,使用XmlTextReader类因此, XmlTextReader类提供用于读取 XML 的速度更快的机制。XmlTextReader类都有不同的构造函数以指定的 XML 数据的位置。下面的代码创建的XmlTextReader类的一个实例,并将 Books.xml 文件加载。将下面的代码添加到 Main 过程的 Class1。
    XmlTextReader reader = new XmlTextReader ("books.xml");
    					
  6. 通过 XML 读取。(注意此步骤演示了一个外部"while"循环,并在随后的两个步骤中演示如何使用该循环来读取 XML。您创建的XmlTextReader对象后,使用Read方法来读取 XML 数据。Read方法继续移动通过 XML 文件按顺序,直到到达文件的末尾,在该点读取方法返回的值为"False。
    while (reader.Read()) 
    {
        // Do some work here on the data.
    	Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    					
  7. 检查节点。要处理的 XML 数据,每个记录都有可从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.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>
				

故障排除

当您测试代码时,您可能会收到以下异常错误消息: 未处理的异常: System.Xml.XmlException: 意外的 XML 声明。XML 声明必须在文档中的第一个节点,并且不允许任何空白字符出现在它之前。

其他信息: 系统错误。下面的代码行上出现异常错误: 时
(reader.Read())
该异常错误是无效的处理指令所致。例如,处理指令可能包含多余的空格。下面是无效的处理指令的示例:
<?xml version='1.0' ?>
此 xml 标记具有上述空间<’ bracket.="" remove="" the="" preceding="" whitespace="" to="" resolve="" the="" error.=""></’>

参考

下面的文件,可从 Microsoft 下载中心下载:
收起这个图片展开这个图片
下载
立即下载 Books.exe 软件包。
有关.NET Framework XML 类和 C# 的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点:
http://msdn.microsoft.com/en-us/magazine/cc302158.aspx
有关XmlReader类的详细信息,请访问下面的 MSDN Web 站点:
http://msdn2.microsoft.com/en-us/library/system.xml.xmlreader (vs.71).aspx
有关如何使用XmlReader来读取 XML 数据的详细信息,请访问以下 MSDN Web 站点:
http://msdn2.microsoft.com/en-us/library/aa720470 (VS.71).aspx

http://msdn2.microsoft.com/en-us/library/tfz3cz6w (vs.71).aspx

属性

文章编号: 307548 - 最后修改: 2012年11月15日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 标准版
关键字:?
kbdownload kbhowtomaster kbmt KB307548 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 307548
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com