文章編號: 307548 - 上次校閱: 2007年5月13日 - 版次: 1.3

如何:使用 Visual C# .NET 從檔案讀取 XML

本文曾發行於 CHT307548

在此頁中

全部展開 | 全部摺疊

結論

本文將說明如何使用 XmlTextReader 類別,從檔案讀取 Extensible Markup Language (延伸式標記語言,XML)。 XmlTextReader 提供了 XML 的直接剖析和 Token 處理,並且實作 XML 1.0 規格以及符合全球資訊網協會 (W3C) 之 XML 規格的命名空間 (Namespace)。本文提供了對 XML 快速、Token 化資料流存取,而非使用像 XML「文件物件模型」(DOM) 這類的物件模型。

基本需求

下最清單提列了建議使用的硬體、軟體、網路基礎架構以及所需安裝的 Service Pack:
  • Microsoft Visual Studio .NET
本文件同時也假設您已十分熟悉下列主題:
  • XML 專有名詞
  • 建立和讀取 XML 檔

如何從檔案讀取 XML

這個範例使用了一個名為 Books.xml 的檔案。您可以自行建立 Books.xml 檔案,或者使用下列資料夾中 .NET Software Development Kit (SDK) QuickStart 所附的範例檔案:
\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「主控台應用程式」(Console Application)。您可以直接到 〈完整程式碼清單〉 一節或是逐步進行下列步驟,建置這個應用程式。
  3. 請確定專案含有 System.Xml.dll 組件的參考。
  4. System.Xml 命名空間上,指定 using 指示詞,您就無需日後在程式碼中取得 XmlTextReader 宣告資格。您必須將 using 指示詞使用在任何其他宣告之前。
    using System.Xml;
  5. 建立一個 XmlTextReader 物件的執行個體 (Instance),並且將它填入 XML 檔案。通常, XmlTextReader 類別是使用於必須存取 XML 作為未經處理資料 (Raw Data),但不希望有 DOM 之額外負荷的情況下;因此, 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 屬性 (Property) 會傳回目前節點 (或記錄) 的節點名稱 (項目和屬性 (Attribute) 名稱) 和節點值 (節點文字)。 NodeType 列舉型別 (Enumeration) 決定了節點的型別。下列範例程式碼會顯示項目的名稱和文件類型。請注意這個範例不考慮項目屬性 (Attribute)。
    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. 檢查這些屬性 (Attribute)。項目節點型別可以包括與它們關聯的節點屬性清單。 MovetoNextAttribute 方法會依序移經項目中的每一個屬性。使用 HasAttributes 屬性 (Property),測試節點是否有任何屬性 (Attribute)。 AttributeCount 屬性 (Property) 會傳回目前節點的屬性 (Attribute) 數目。
    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 下載中心」下載:
摺疊此圖像展開此圖像

Download
Download Books.xml now (http://download.microsoft.com/download/xml/utility/1.0.0.1/wxp/en-us/books.exe)
如需詳細資訊,請參閱 《MSDN Magazine》 中的〈XML in .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation〉文件,位於下列 Microsoft 網站:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/xml0101.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmag01/html/xml0101.asp)
如需 XmlReader 類別的詳細資訊,請參閱下列 Microsoft .NET Framework Class Library 網站:
http://msdn.microsoft.com/library/dotnet/cpref/frlrfsystemxmlxmlreaderclasstopic.htm (http://msdn.microsoft.com/library/dotnet/cpref/frlrfsystemxmlxmlreaderclasstopic.htm)
如需如何使用 XmlReader 讀取 XML 資料的詳細資訊,請參閱下列 Microsoft《.NET Framework Developer's Guide》文件:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconreadingxmldatausingxmlreader.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconreadingxmldatausingxmlreader.asp)



本文件是根據 Microsoft Knowledgebase 文件編號 Q307548 翻譯的。若要參考原始英文文件內容,請至以下網址:

http://support.microsoft.com/support/kb/articles/Q307/5/48.asp (http://support.microsoft.com/kb/307548/en-us?ln=en-us&sd=gn&fr=0)

這篇文章中的資訊適用於:
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbdownload kbhowto kbhowtomaster KB307548
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
 

文章翻譯