URL'den XML verilerini okumak için Visual C# kullanma
Bu makalede, bir URL'den XML okumak için sınıfını XmlTextReader
nasıl kullanacağınız gösterilmektedir. Akış bilgileri bir sunucudan, dosyadan veya TextReader
sınıftan bayt akışı gibi her türlü kaynaktan gelebilir.
Özgün ürün sürümü: Visual Studio
Özgün KB numarası: 307643
Gereksinimler
Bu makalede, aşağıdaki konulara aşina olduğunuz varsayılır:
- Microsoft Visual Studio
- XML terminolojisi
- XML oluşturma ve okuma
- URL'ler ve XML uç noktası oluşturma
Bu makale, .NET Framework Sınıf Kitaplığı ad alanını System.Xml
ifade eder.
URL'den XML verilerini okuma
Bu örnekte Books.xmladlı bir dosya kullanılır. Kendi Books.xml dosyanızı oluşturabilir veya .NET Yazılım Geliştirme Seti (SDK) Hızlı Başlangıçları'na dahil edilen örnek dosyayı kullanabilirsiniz. Bu dosya ayrıca indirilebilir; indirme konumu için bu makalenin Başvurular bölümündeki ilk öğeye bakın.
Books.xml dosyasını bilgisayarınızdaki
\Inetpub\Wwwroot
klasöre kopyalayın.Visual Studio'yu açın.
Yeni bir Visual C# Konsol Uygulaması oluşturun. Uygulamayı derlemek için Tam kod listesi bölümüne devam edebilir veya bu adımlardan devam edebilirsiniz.
Kodunuzda daha sonra sınıf bildirimlerini nitelemeniz
XmlTextReader
gerekmeyecek şekilde ad alanında using yönergesiniSystem.Xml
belirtin. Diğer bildirimlerden önce using yönergesini kullanmanız gerekir.using System.Xml;
XML akışını BIR URL aracılığıyla alın. Akışlar cihazdan bağımsızlığını sağlamak için kullanılır; bu nedenle, bir akışın kaynağı değişirse program değişiklikleri gerekmez. URL için bir sabit bildirin
http://localhost/books.xml
. bir sonraki adımdaXmlTextReader
ile sabitini kullanacaksınız. Aşağıdaki kod örneğini varsayılan sınıfın ana yordamına ekleyin:String URLString = "http://localhost/books.xml";
Sınıfının bir örneğini
XmlTextReader
oluşturun ve URL'yi belirtin. Genellikle,XmlTextReader
Belge Nesne Modeli (DOM) yükü olmadan XML'e ham veri olarak erişmeniz gerekiyorsa kullanılır; bu nedenle XML'yiXmlTextReader
okumak için daha hızlı bir mekanizma sağlar. sınıfı,XmlTextReader
XML verilerinin konumunu belirtmek için farklı oluşturuculara sahiptir. Aşağıdaki kod birXmlTextReader
nesnenin örneğini oluşturur ve URL'yi oluşturucuya geçirir:XmlTextReader reader = new XmlTextReader (URLString);
XML'yi okuyun.
Not
Bu adım temel bir dış
while
döngü gösterir ve sonraki iki adımda bu döngünün nasıl kullanılacağı ve XML'nin nasıl okunduğu açıklanır.Yüklendikten sonra,
XmlTextReader
XML verileri arasında ilerlemek için sıralı okumalar gerçekleştirir ve sonraki kaydı almak için yöntemini kullanırRead
. Yöntem,Read
başka kayıt yoksa false döndürür.while (reader.Read()) { // Do some work here on the data. Console.WriteLine(reader.Name); } Console.ReadLine();
Düğümleri inceleyin. XML verilerini işlemek için her kaydın özelliğinden
NodeType
belirlenebilen bir düğüm türü vardır. veValue
özellikleri,Name
geçerli düğümün (veya kaydın) düğüm adını (öğe ve öznitelik adları) ve düğüm değerini (düğüm metni) döndürür. SabitNodeType
listesi düğüm türünü belirler. Aşağıdaki örnek kod, öğelerin adını ve belge türünü görüntüler.Not
Bu örnek, öğe özniteliklerini yoksayar.
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; } }
Öznitelikleri inceleyin. Öğe düğümü türleri, bunlarla ilişkilendirilmiş öznitelik düğümlerinin listesini içerebilir. yöntemi,
MovetoNextAttribute
öğesindeki her öznitelikte sıralı olarak taşınır. DüğümdeHasAttributes
öznitelik olup olmadığını test etmek için özelliğini kullanın. özelliği,AttributeCount
geçerli düğüm için öznitelik sayısını döndürür.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; } }
Projenizi derleyin ve çalıştırın.
Tam kod listesi
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;
}
}
}
}
}
Örnek çıkış
<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>
Sorun giderme
Kodu test ettiğinizde aşağıdaki özel durum hata iletisini alabilirsiniz:
System.Xml türünde işlenmeyen bir özel durum. XmlException, system.xml.dll Ek bilgi: Beklenmeyen XML bildiriminde oluştu. XML bildirimi belgedeki ilk düğüm olmalıdır ve ondan önce boşluk karakterlerinin görünmesine izin verilmez. 1. satır, konum 4.
Özel durum hatası aşağıdaki kod satırında oluşur.
while (reader.Read())
Özel durum hatasını çözmek için, Books.xml belgedeki ilk düğümün önündeki boşluk karakterini kaldırın.