這個範例使用了一個名為 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 指示詞使用在任何其他宣告之前。
using System.Xml;
建立一個 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("" Console.WriteLine(? reader.Name); +>");
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("" Console.WriteLine(? reader.Name); +>");
break;
}
}
儲存並關閉專案。
回此頁最上方
完整程式碼清單
using System;
using System.Xml;
namespace ReadXMLfromFile
{
///
/// Summary description for Class1.
///
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("" Console.WriteLine(? reader.Name); +>");
break;
}
}
Console.ReadLine();
}
}
}

No comments:
Post a Comment