Aracılığıyla paylaş


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.Xmlifade 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.

  1. Books.xml dosyasını bilgisayarınızdaki \Inetpub\Wwwroot klasöre kopyalayın.

  2. Visual Studio'yu açın.

  3. 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.

  4. Kodunuzda daha sonra sınıf bildirimlerini nitelemeniz XmlTextReader gerekmeyecek şekilde ad alanında using yönergesini System.Xml belirtin. Diğer bildirimlerden önce using yönergesini kullanmanız gerekir.

    using System.Xml;
    
  5. 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ımda XmlTextReaderile 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";
    
  6. 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'yi XmlTextReader 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 bir XmlTextReader nesnenin örneğini oluşturur ve URL'yi oluşturucuya geçirir:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. 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ır Read . 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();
    
  8. Düğümleri inceleyin. XML verilerini işlemek için her kaydın özelliğinden NodeType belirlenebilen bir düğüm türü vardır. ve Value ö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. Sabit NodeType 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;
        }
    }
    
  9. Ö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üğümde HasAttributes ö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;
        }
    }
    
  10. 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.

Başvurular