您目前已離線,請等候您的網際網路重新連線

HOW TO:在 .NET Framework SDK 中讀取資料流的 XML 資料

本文曾發行於 CHT301228
本文件參考下列 Microsoft .NET Framework Class Library 命名空間:
  • System.Xml
  • System.IO

本文內容

結論
本文件示範如何使用 [XmlTextReader] 類別來讀取資料流的「可延伸標記語言」 (XML)。資料流的來源有許多種,例如伺服器的位元組資料流、檔案或 [TextReader] 類別。

回到頁首

需求

下面清單提列了建議使用的硬體、軟體、網路基礎架構以及您將需要的 Service Pack:
  • Microsoft Windows 2000 Professional (商用版)、Windows 2000 Server、Windows 2000 Advanced Server 或 Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
本文件假設您熟悉下列主題:
  • XML 術語
  • 建立及讀取 XML

如何讀取資料流的 XML 資料

  1. 開啟 Visual Studio .NET。
  2. 建立新的 Microsoft Visual Basic (VB) 或 Microsoft Visual C# 主控台應用程式。

    注意:下列步驟提供如何建置應用程式的詳細描述。您也可以直接跳到步驟 10,該處有完整的程式碼。
  3. 確定專案含有對 [System.Xml][System.IO] 名稱區的參考。
  4. 使用 [Xml] 名稱區上的 IMPORTS 陳述式,就不須在您後續的程式碼中的該名稱區中限定 [XmlTextReader] 宣告。您必須在任何其他宣告之前使用 IMPORTS 陳述式,如下所述:
    Visual Basic .NET 程式碼
    Imports System.XmlImports System.IO						
    Visual C# 程式碼
    using System.Xml;using System.IO;						
  5. 建立或擷取 XML 資料流。資料流是一種抽象表示方式,用來表示資料 (此處即為 XML 資料) 來源或目的地的輸入或輸出裝置。您可以寫入及讀取資料流,且可將其想像成位元組的流動過程。

    資料流是用來提供裝置的獨立性,因此在例如資料流來源變更時,也不需要程式變更。有幾種不同的方式,可用來建立 [XmlTextReader] 類別的資料流。請選取下列程式碼範例之一,以便新增到預設模組的 Main 程序:
    • 使用 [StringReader] 物件的程式碼範例:

      物件 [StringReader] 可讀取字串中的字元,並在建構時採用字串值。Visual Basic .NET 程式碼
      Dim stream as System.IO.StringReaderstream = new StringReader("<?xml version='1.0'?>" & _"<!-- This file is a book store inventory. -->" & _"<bookstore>" & _" <book genre=""autobiography"" 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>" & _"</bookstore>")	
      C# 程式碼
      StringReader stream;stream = new StringReader("<?xml version='1.0'?>" +	"<!-- This file represents a fragment of a book store inventory database. -->" +	"<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>");						
    • 使用 [StreamReader] 物件的程式碼範例:

      物件 [StreamReader] 是用來讀取檔案中的字元。它可讀入要在建構時讀取的檔案名稱:Visual Basic .NET 程式碼
      Dim stream as System.IO.StreamReader' Loads the XML data in the file books.xml in a new stream.stream = New StreamReader ("books.xml")						
      C# 程式碼
      System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");						
      請注意此處使用的是 Books.xml 檔案。您可以建立自己的 Books.xml 檔案。範例 Books.xml 檔案也會隨附 Visual Studio .Net 及 .Net Framework SDK。

  6. 伴隨資料流建構 [XmlTextReader] 類別。如果您必須存取 XML 做為原始資料而不想附加「文件物件模組 (DOM)」,則通常可使用 [XmlTextReader] ;因此 [XmlTextReader] 可提供更迅速的機制來讀取 XML。 [XmlTextReader] 有不同的建構函式可指定 XML 資料的位置。下列程式碼可載入資料流中的 [XmlTextReader]
    Visual Basic .NET 程式碼
    Dim reader As XmlTextReader = New XmlTextReader (stream)						
    C# 程式碼
    XmlTextReader reader = null;	reader = new XmlTextReader (stream);						
  7. 讀取整個 XML。載入 [XmlTextReader] 之後,它就可執行連續讀取以便在 XML 資料中移動,並使用 [Read] 方法取得下一個記錄。如果沒有更多記錄,它就會傳回 False。
    Visual Basic .NET 程式碼
    Do While (reader.Read())    ' Do some work here on the data.    Console.WriteLine(reader.Name)Loop' Reading of the XML file has finished.Console.ReadLine() 'Pause                  
    C# 程式碼
    while (reader.Read()){    // Do some work here on the data.    ...}while (reader.Read()){    // Do some work here on the data.	Console.WriteLine(reader.Name);}Console.ReadLine();                  
  8. 檢查節點。為了要處理 XML 資料,每個記錄都會有一個節點類型是可由 [NodeType] 屬性來判定。 [Name][Value] 屬性可傳回目前節點 (或記錄) 的節點名稱 (元素及屬性名稱) 及節點值 (節點文字)。 [NodeType] 列舉可判斷節點類型。下列範例可顯示元素名稱及文件類型。請注意,此範例將忽略元素屬性。
    Visual Basic .NET 程式碼
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Display beginning of element.Console.Write("<" + reader.Name)Console.WriteLine(">")Case XmlNodeType.Text 'Display the text in each element.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Display end of element.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop						
    C# 程式碼
    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 end of element.             Console.Write("</" + reader.Name);    Console.WriteLine(">");             break;    }}                
  9. 檢查屬性。元素節點類型可包括與它們相關的屬性節點清單。 [MovetoNextAttribute] 方法可依序移動到元素中的每個屬性。使用 [HasAttributes] 屬性來測試節點是否有任何屬性。 [AttributeCount] 屬性可傳回目前節點的屬性數量。
    Visual Basic .NET 程式碼
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Display beginning of element.Console.Write("<" + reader.Name)         If reader.HasAttributes Then 'If attributes exist	While reader.MoveToNextAttribute()					'Display attribute name and value.Console.Write(" {0}='{1}'", reader.Name, reader.Value)End WhileEnd IfConsole.WriteLine(">")Case XmlNodeType.Text 'Display the text in each element.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Display end of element.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop         
    C# 程式碼
    while (reader.Read()){    switch (reader.NodeType)     {        case XmlNodeType.Element:// The node is an Element.            Console.Write("<" + reader.Name);            while (reader.MoveToNextAttribute()) // Read 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 end of element.             Console.Write("</" + reader.Name);    Console.WriteLine(">");             break;    }}                 

  10. 此處提供完整程式碼以供參考。
    Visual Basic.Net 程式碼
    Imports System.XmlImports System.IOModule Module1    Sub Main()        Dim stream As System.IO.StreamReader        ' Loads the XML data in the file books.xml in a new stream.        stream = New StreamReader("books.xml")        Dim reader As XmlTextReader = New XmlTextReader(stream)        Do While (reader.Read())            Select Case reader.NodeType                Case XmlNodeType.Element 'Display beginning of element.                    Console.Write("<" + reader.Name)                    If reader.HasAttributes Then 'If attributes exist                       While reader.MoveToNextAttribute()                            'Display attribute name and value.                            Console.Write(" {0}='{1}'", reader.Name, reader.Value)                       End While                    End If                    Console.WriteLine(">")                Case XmlNodeType.Text 'Display the text in each element.                    Console.WriteLine(reader.Value)                Case XmlNodeType.EndElement 'Display end of element.                    Console.Write("</" + reader.Name)                    Console.WriteLine(">")            End Select         Loop     End SubEnd Module                 

    C# 程式碼
    using System;using System.Xml;using System.IO;namespace ReadXMLFromStream{	/// <summary>	/// Summary description for Class1.	/// </summary>	class Class1	{		static void Main(string[] args)		{			System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");			XmlTextReader reader = null;				reader = new XmlTextReader (stream);			while (reader.Read())			{				switch (reader.NodeType) 				{					case XmlNodeType.Element:// The node is an Element.						Console.Write("<" + reader.Name);						while (reader.MoveToNextAttribute()) // Read 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 end of element.						Console.Write("</" + reader.Name);						Console.WriteLine(">");						break;				}			}		}	}}                                            
  11. 建置並執行專案。
回到頁首
参考
如需更多資訊,請參考《XML in Microsoft .NET:.NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation》文件 (位於下列 Microsoft 網站的 MSDN Magazine ): 如需 [XmlReader][StreamReader][StringReader] 類別的更多資訊,請參考 Microsoft .NET Framework Class Library 說明文件。

如需使用 [XmlReader] 讀取 XML 資料的詳細資訊,請參考 Microsoft .NET Framework Developer's Guide 說明文件。

回到頁首
dotnet xml
內容

文章識別碼:301228 - 最後檢閱時間:03/05/2003 09:19:00 - 修訂: 2.1

  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework Class Libraries 1.1
  • kbhowtomaster KB301228
意見反應