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

文章翻譯 文章翻譯
文章編號: 301228 - 檢視此文章適用的產品。
本文曾發行於 CHT301228
全部展開 | 全部摺疊

在此頁中

結論

本文件示範如何使用 [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.Xml
    Imports 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.StringReader
      stream = 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.NodeType
    Case 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 Select
    Loop
    						
    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.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
             
    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.Xml
    Imports System.IO
    Module 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 Sub
    
    End 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 ):
http://msdn.microsoft.com/library/periodic/period01/xml0101.htm
如需 [XmlReader][StreamReader][StringReader] 類別的更多資訊,請參考 Microsoft .NET Framework Class Library 說明文件。

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

屬性

文章編號: 301228 - 上次校閱: 2003年3月5日 - 版次: 2.1
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework Class Libraries 1.1
關鍵字:?
kbhowtomaster KB301228
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