本文將說明如何使用
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
這個範例使用了一個名為 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 檔案,下載的位置請參閱
〈參考〉
一節。
-
開啟 Visual Studio .NET。
-
建立一個新的 Visual C# .NET「主控台應用程式」(Console Application)。您可以直接到
〈完整程式碼清單〉
一節或是逐步進行下列步驟,建置這個應用程式。
-
請確定專案含有
System.Xml.dll
組件的參考。
-
在
System.Xml
命名空間上,指定
using
指示詞,您就無需日後在程式碼中取得
XmlTextReader
宣告資格。您必須將
using
指示詞使用在任何其他宣告之前。
-
建立一個
XmlTextReader
物件的執行個體 (Instance),並且將它填入 XML 檔案。通常,
XmlTextReader
類別是使用於必須存取 XML 作為未經處理資料 (Raw Data),但不希望有 DOM 之額外負荷的情況下;因此,
XmlTextReader
類別提供了一種更快速讀取 XML 的機制。
XmlTextReader
類別擁有不同的建構函式,用來指定 XML 資料的位置。下列程式碼會建立一個
XmlTextReader
類別的執行個體並且載入 Books.xml 檔案。請將下列程式碼加入到 Class1 的 Main 程序。
XmlTextReader reader = new XmlTextReader ("books.xml"); -
讀取 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(); -
檢查節點。為了處理 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;
}
} -
檢查這些屬性 (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;
}
} -
儲存並關閉專案。
完整程式碼清單
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 下載中心」下載:
如需詳細資訊,請參閱
《MSDN Magazine》
中的〈XML in .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation〉文件,位於下列 Microsoft 網站:
如需
XmlReader
類別的詳細資訊,請參閱下列 Microsoft .NET Framework Class Library 網站:
如需如何使用
XmlReader
讀取 XML 資料的詳細資訊,請參閱下列 Microsoft《.NET Framework Developer's Guide》文件:
本文件是根據 Microsoft Knowledgebase 文件編號 Q307548 翻譯的。若要參考原始英文文件內容,請至以下網址: