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

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

在此頁中

結論

這篇文章說明如何使用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 下載中心 」 下載:
摺疊此圖像展開此圖像
下載
立即下載 Books.exe 套件。
如需有關.NET Framework XML 類別和 C# 的詳細資訊,請造訪下列 Microsoft 開發人員網路 (MSDN) 網站:
http://msdn.microsoft.com/en-us/magazine/cc302158.aspx
如需有關XmlReader類別的詳細資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/system.xml.xmlreader (vs.71).aspx
如需有關如何使用XmlReader來讀取 XML 資料的詳細資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/aa720470 (VS.71).aspx

http://msdn2.microsoft.com/en-us/library/tfz3cz6w (vs.71).aspx

屬性

文章編號: 307548 - 上次校閱: 2013年4月21日 - 版次: 3.0
這篇文章中的資訊適用於:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbdownload kbhowtomaster kbmt KB307548 KbMtzh
機器翻譯
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。
按一下這裡查看此文章的英文版本:307548
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