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

如何從檔案讀取 XML,藉由使用視覺 C#

本文曾發行於 CHT307548
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:307548
這份文件的 Microsoft Visual Basic.NET 版本,請參閱 301225.

下列的 Microsoft.NET Framework 類別庫命名空間會參照這份文件:
  • System.Xml
結論
這篇文章說明如何使用XmlTextReader類別來讀取 「 可延伸標記語言 (XML) 檔案。XmlTextReader提供直接的剖析和 XML 和實作 XML 1.0 規格,以及從全球資訊網協會 (W3C) XML 規格中的命名空間的 token。這篇文章提供快速、 語彙基元化的資料流存取 XML,而不是使用物件模型,例如 XML 文件物件模型 (DOM)。

需求

以下概括列出建議的硬體、 軟體、 網路基礎結構,以及您所需要的 service pack:
  • Microsoft Visual Studio 2005年或 Microsoft Visual Studio.NET
本文假設您已熟悉下列主題:
  • XML 的術語
  • 建立及讀取 XML 檔案

如何從檔案讀取 XML

這個範例使用一個名為 Books.xml 檔案。您可以建立您自己 Books.xml 檔案,或使用範例檔案隨附於.NET 軟體開發套件 (SDK) 快速入門,在下列資料夾:
\Program Files\Microsoft Visual Studio 的.NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
您必須將 Books.xml 複製到 \Bin\Debug 資料夾中,您可以在其中建立這個專案的資料夾,即可找到。Books.xml 也是可供下載。請參閱"參考"區段的下載位置。
  1. 啟動 Visual Studio 2005年或 Visual Studio.NET。
  2. 建立新 Visual C# 主控台應用程式。在您繼續直接"完整程式碼清單"區段,或繼續執行下列步驟以建置應用程式。
  3. 請確定專案包含System.Xml.dll組件的參考。
  4. 指定的System.Xml命名空間的using指示詞讓您不需要限定稍後在程式碼中的XmlTextReader宣告。您必須使用任何其他宣告之前的using指示詞。
    using System.Xml;					
  5. 建立XmlTextReader物件的執行個體,並填入的 XML 檔案。如果您需要存取 XML 做為未經處理的資料,而造成效能低落的 DOM 中 ; 一般而言,使用XmlTextReader類別因此, XmlTextReader類別會提供更迅速的機制來讀取 XML。XmlTextReader類別會有不同的建構函式來指定 XML 資料的位置。下列程式碼會建立XmlTextReader類別的執行個體,並載入 Books.xml 檔案。加入下列程式碼的類別 1 的 Main 程序。
    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 資料,每項記錄都是可由節點類型屬性的節點型別。名稱的屬性會傳回節點名稱 (元素及屬性名稱) 和目前節點 (或記錄) 的節點值 (節點文字)。節點類型的列舉型別會決定節點型別。下列範例程式碼顯示的項目和文件類型的名稱。請注意這個範例會忽略元素屬性。
    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 下載中心 」 下載:
如需有關.NET Framework XML 類別和 C# 的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:如需有關XmlReader類別的詳細資訊,請造訪下列 MSDN 網站:如需有關如何使用XmlReader來讀取 XML 資料的詳細資訊,請造訪下列 MSDN 網站:

警告:本文為自動翻譯

內容

文章識別碼:307548 - 最後檢閱時間:04/21/2013 04:37:00 - 修訂: 3.0

Microsoft Visual C# 2008 Express Edition, Microsoft Visual C# 2005, Microsoft Visual C# .NET 2002 Standard Edition

  • kbdownload kbhowtomaster kbmt KB307548 KbMtzh
意見反應
ent.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">