307643 HOW TO:使用 Visual C# .NET 从 URL 读取 XML 数据 (From MKBA)

本文讨论一种 Microsoft 产品的 Beta 版本。本文中的信息按“原样”提供,如有更改恕不另行通知。

对于该 Beta 产品,Microsoft 不提供正式的产品支持。有关获取对 Beta 版本的支持的信息,请参见 Beta 产品文件中包括的文档资料,或查看您下载此版本的站点。

有关本文的 Microsoft Visual Basic .NET 版本,请参见 CHS301232

本任务的内容

概要

本文描述如何使用 XmlTextReader 类从统一资源定位器 (URL) 中读取扩展标记语言 (XML)。 流信息可以有多种来源,如来自服务器、文件或 TextReader 类的字节流。

返回页首

要求

下表概括了推荐使用的硬件、软件、网络架构以及所需的 Service Pack:
  • Microsoft Visual Studio .NET
本文假定您熟悉下列主题:
  • XML 术语
  • 创建和读取 XML
  • URL 和创建 XML 终结点
返回页首

如何从 URL 读取 XML 数据

本示例使用名为 Books.xml 的文件。您可以创建自己的 Books.xml 文件,或者使用 .NET 软件开发工具包 (SDK) 快速入门中包括的示例文件。 还可以下载此文件;有关下载位置的信息,请参阅本文 参考部分的第一条。
  1. 将 Books.xml 文件复制到计算机上的 /Inetpub/Wwwroot 文件夹中。
  2. 打开 Visual Studio .NET。
  3. 新建 Visual C# .NET 控制台应用程序。 可以转到完整代码列表一节,也可以继续执行这些步骤以生成应用程序。
  4. System.Xml 名称空间上指定 using 指令,这样,以后就不需要在代码中限定 XmlTextReader 类声明了。using 指令必须位于任何其他声明之前。
    using System.Xml;
  5. 通过 URL 检索 XML 流。 流用于提供与设备之间的独立性,因此,如果流的来源发生变化,并不要求程序也随之变化。 给 http://localhost/books.xml URL 声明一个常量。 在下一步中,将此常量用于 XmlTextReader。 将以下代码示例添加到此默认类的 Main 过程中:
    String URLString = " http://localhost/books.xml";
  6. 创建 XmlTextReader 类的一个实例并指定 URL。 通常,如果需要将 XML 作为原始数据来访问而不产生文档对象模型 (DOM) 开销,则使用 XmlTextReader;因此,XmlTextReader 提供了一种更快读取 XML 的机制。XmlTextReader 类使用不同的构造函数来指定 XML 数据的位置。 以下代码创建 XmlTextReader 对象的一个实例,并将 URL 传递给构造函数:
    XmlTextReader reader = new XmlTextReader (URLString);
  7. 读取全部 XML 数据。 (注意,此步骤显示一个基本的外部“while”循环,下两步描述如何使用该循环以及读取 XML。)加载后,XmlTextReader 将连续读取 XML 数据,并使用 Read 方法获取下一条记录。如果没有记录,Read 方法将返回 False。
    while (reader.Read()) 
    {
    // Do some work here on the data.
    	Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
  8. 检查节点。若要处理 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;
        }
    }
  9. 检查属性。元素节点类型可包括一系列与其关联的属性节点。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;
        }
    }
  10. 生成并运行您的项目。
返回页首

完整代码列表

using System;
using System.Xml;

namespace ReadXMLfromURL
{
/// <summary>
    /// Summary description for Class1.
/// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            String URLString = "http://localhost/books.xml";
            XmlTextReader reader = new XmlTextReader (URLString);
		
            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;
                }
            }
        }
    }
}
返回页首

示例输出

<bookstore>>
<book genre='autobiography' publicationdate='1981' ISBN='1-861003-11-0'>
<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 genre='novel' publicationdate='1967' ISBN='0-201-63361-2'>>
<title>>
The Confidence Man
</title>
<author>>
<first-name>>
Herman
</first-name>
<last-name>>
Melville
</last-name>
</author>
<price>>
11.99
</price>
</book>
<book genre='philosophy' publicationdate='1991' ISBN='1-861001-57-6'>>
<title>>
The Gorgias
</title>
<author>>
<name>>
Plato
</name>
</author>
<price>>
9.99
</price>
</book>
</bookstore>
返回页首

参考

下列文件可从 Microsoft 下载中心下载:

下载立即下载 Books.xml

有关详细信息,请参阅“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 类的更多信息,请参阅以下 Microsoft .NET 框架类库文档:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXmlReaderClassTopic.asp

有关如何使用 XmlReader 读取 XML 数据的更多信息,请参见下面的 Microsoft .NET 框架开发人员指南文档:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconreadingxmldatausingxmlreader.asp

返回页首


这篇文章中的信息适用于:

  • Microsoft Visual C# .NET Beta 2
最近更新:2004-8-13 (1.2)
关键字:kbdownload kbhowto kbHOWTOmaster KB307643 kbAudDeveloper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值