Udostępnij za pośrednictwem


Odczytywanie danych XML z adresu URL przy użyciu języka Visual C#

W tym artykule pokazano, jak używać XmlTextReader klasy do odczytywania kodu XML z adresu URL. Przesyłane strumieniowo informacje mogą pochodzić z wszelkiego rodzaju źródeł, takich jak strumień bajtów z serwera, pliku lub TextReader klasy.

Oryginalna wersja produktu: Visual Studio
Oryginalny numer KB: 307643

Wymagania

W tym artykule założono, że znasz następujące tematy:

  • Microsoft Visual Studio
  • Terminologia XML
  • Tworzenie i odczytywanie kodu XML
  • Adresy URL i tworzenie punktu końcowego XML

Ten artykuł odnosi się do przestrzeni System.Xmlnazw biblioteki klas .NET Framework .

Jak odczytywać dane XML z adresu URL

W tym przykładzie użyto pliku o nazwie Books.xml. Możesz utworzyć własny plik Books.xml lub użyć przykładowego pliku dołączonego do przewodników Szybki start zestawu .NET Software Development Kit (SDK). Ten plik jest również dostępny do pobrania; Zapoznaj się z pierwszym elementem w sekcji Odwołania w tym artykule, aby uzyskać informacje o lokalizacji pobierania.

  1. Skopiuj plik Books.xml do folderu \Inetpub\Wwwroot na komputerze.

  2. Otwórz program Visual Studio.

  3. Utwórz nową aplikację konsolową języka Visual C#. Możesz przejść do sekcji Ukończ listę kodu lub kontynuować wykonywanie tych kroków w celu skompilowania aplikacji.

  4. Określ dyrektywę using w System.Xml przestrzeni nazw, aby nie trzeba było kwalifikować deklaracji klas w dalszej XmlTextReader części kodu. Należy użyć dyrektywy using przed innymi deklaracjami.

    using System.Xml;
    
  5. Pobierz strumień XML za pomocą adresu URL. Strumienie są używane do zapewnienia niezależności od urządzenia; W związku z tym zmiany programu nie są wymagane, jeśli zmieni się źródło strumienia. Zadeklaruj stałą dla http://localhost/books.xml adresu URL. W następnym kroku użyjesz stałej z elementem XmlTextReader. Dodaj następujący przykład kodu do procedury głównej klasy domyślnej:

    String URLString = "http://localhost/books.xml";
    
  6. Utwórz wystąpienie XmlTextReader klasy i określ adres URL. Zazwyczaj jest używany, XmlTextReader jeśli chcesz uzyskać dostęp do kodu XML jako danych pierwotnych bez obciążenia modelu obiektów dokumentu (DOM), w związku z czym XmlTextReader zapewnia szybszy mechanizm odczytywania kodu XML. Klasa XmlTextReader ma różne konstruktory, aby określić lokalizację danych XML. Poniższy kod tworzy wystąpienie obiektu XmlTextReader i przekazuje adres URL do konstruktora:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Odczyt za pośrednictwem kodu XML.

    Uwaga

    W tym kroku przedstawiono podstawową, zewnętrzną while pętlę, a kolejne dwa kroki opisują sposób używania tej pętli i odczytywania kodu XML.

    Po załadowaniu wykonuje sekwencyjne odczyty w XmlTextReader celu przenoszenia danych XML i używa Read metody w celu uzyskania następnego rekordu. Metoda Read zwraca wartość false, jeśli nie ma więcej rekordów.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Sprawdź węzły. Aby przetworzyć dane XML, każdy rekord ma typ węzła, który można określić na NodeType podstawie właściwości . Właściwości Name i Value zwracają nazwę węzła (nazwy elementów i atrybutów) oraz wartość węzła (tekst węzła) bieżącego węzła (lub rekordu). Wyliczenie NodeType określa typ węzła. Poniższy przykładowy kod zawiera nazwę elementów i typ dokumentu.

    Uwaga

    Ten przykład ignoruje atrybuty elementów.

    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. Sprawdź atrybuty. Typy węzłów elementów mogą zawierać listę skojarzonych z nimi węzłów atrybutów. Metoda MovetoNextAttribute przechodzi sekwencyjnie przez każdy atrybut w elemencie. Użyj właściwości , HasAttributes aby sprawdzić, czy węzeł ma jakiekolwiek atrybuty. Właściwość AttributeCount zwraca liczbę atrybutów dla bieżącego węzła.

    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. Skompiluj i uruchom projekt.

Ukończ listę kodu

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;
                }
            }
        }
    }
}

Przykładowe dane wyjściowe

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

Rozwiązywanie problemów

Podczas testowania kodu może zostać wyświetlony następujący komunikat o błędzie wyjątku:

Nieobsługiwany wyjątek typu System.Xml. XmlException wystąpił w system.xml.dll Dodatkowe informacje: Nieoczekiwana deklaracja XML. Deklaracja XML musi być pierwszym węzłem w dokumencie i żadne znaki odstępu nie mogą być wyświetlane przed nim. Linia 1, pozycja 4.

Błąd wyjątku występuje w poniższym wierszu kodu.

while (reader.Read())

Aby usunąć błąd wyjątku, usuń znak odstępu, który poprzedza pierwszy węzeł w dokumencieBooks.xml .

Informacje