使用 Visual C# 從 URL 讀取 XML 數據
本文說明如何使用 XmlTextReader
類別從 URL 讀取 XML。 串流資訊可能來自各種來源,例如來自伺服器、檔案或類別的 TextReader
位元組數據流。
原始產品版本: Visual Studio
原始 KB 編號: 307643
需求
本文假設您已熟悉下列主題:
- Microsoft Visual Studio
- XML 術語
- 建立和讀取 XML
- URL 和建立 XML 端點
本文參考 .NET Framework 類別庫命名空間 System.Xml
。
如何從 URL 讀取 XML 數據
此範例使用名為 Books.xml 的檔案。 您可以建立自己的 Books.xml 檔案,或使用 .NET 軟體開發工具包 (SDK) 快速入門隨附的範例檔案。 此檔案也可供下載;如需下載位置,請參閱本文的參考一節中的第一個專案。
將 Books.xml 檔案複製到
\Inetpub\Wwwroot
您電腦上的資料夾。開啟 Visual Studio。
建立新的 Visual C# 主控台應用程式。 您可以繼續進行 [完成程式碼清單 ] 區段,或繼續執行這些步驟來建置應用程式。
在命名空間上
System.Xml
指定 using 指示詞,讓您不需要在程式代碼稍後限定XmlTextReader
類別宣告。 您必須在任何其他宣告之前使用using指示詞。using System.Xml;
透過 URL 擷取 XML 資料流。 串流可用來提供裝置的獨立;因此,如果數據流的來源變更,則不需要程序變更。 宣告 URL 的
http://localhost/books.xml
常數。 您將在下一個步驟中搭配XmlTextReader
使用 常數。 將下列程式代碼範例新增至預設類別的主要程式:String URLString = "http://localhost/books.xml";
建立 類別的
XmlTextReader
實例,並指定 URL。 一般而言,XmlTextReader
如果您需要以原始數據的形式存取 XML,而不需要檔物件模型 (DOM) 的額外負荷,則會使用 ;因此,XmlTextReader
提供更快速的機制來讀取 XML。 類別XmlTextReader
具有不同的建構函式,可指定 XML 數據的位置。 下列程式代碼會建立 對象的實例XmlTextReader
,並將URL傳遞至建構函式:XmlTextReader reader = new XmlTextReader (URLString);
讀取 XML。
注意
此步驟顯示基本、外部
while
迴圈,以及接下來兩個步驟說明如何使用該迴圈和讀取 XML。載入之後,
XmlTextReader
執行循序讀取,以跨 XML 數據移動,並使用Read
方法來取得下一筆記錄。 如果沒有其他記錄,此方法Read
會傳回 false。while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();
檢查節點。 若要處理 XML 數據,每個記錄都有可從 屬性判斷的
NodeType
節點類型。Name
和Value
屬性會傳回節點名稱(元素和屬性名稱)和節點值(節點文字)目前節點(或記錄)。 列舉NodeType
會決定節點類型。 下列範例程式代碼會顯示專案名稱和檔類型。注意
此範例會忽略項目屬性。
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; } }
檢查屬性。 元素節點類型可以包含與其相關聯的屬性節點清單。 方法會
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.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 ReadXMLfromURL
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
static void Main(string[] args)
{
String URLString = "http://localhost/books.xml";
XmlTextReader reader = new XmlTextReader (URLString);
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;
}
}
}
}
}
範例輸出
<bookstore>
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<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 genre="novel" publicationdate="1967" ISBN="0-201-63361-2">>
<title>
The Confidence Man
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>
疑難排解
當您測試程式代碼時,可能會收到下列例外狀況錯誤訊息:
System.Xml.XmlException 類型的未處理例外狀況發生在system.xml.dll其他資訊:非預期的 XML 宣告。 XML 宣告必須是檔中的第一個節點,而且不允許在它之前出現空格符。 第 1 行,位置 4。
例外狀況錯誤發生在下列程式代碼行上。
while (reader.Read())
若要解決例外狀況錯誤,請移除Books.xml檔中第一個節點前面的空格符。