Delen via


Visual C# gebruiken om XML-gegevens uit een URL te lezen

In dit artikel leest u hoe u de XmlTextReader klasse gebruikt om XML uit een URL te lezen. De gestreamde informatie kan afkomstig zijn van allerlei soorten bronnen, zoals een bytestroom van een server, een bestand of een TextReader klasse.

Oorspronkelijke productversie: Visual Studio
Oorspronkelijk KB-nummer: 307643

Behoeften

In dit artikel wordt ervan uitgegaan dat u bekend bent met de volgende onderwerpen:

  • Microsoft Visual Studio
  • XML-terminologie
  • XML maken en lezen
  • URL's en het maken van een XML-eindpunt

Dit artikel verwijst naar de .NET Framework Class Library-naamruimte System.Xml.

XML-gegevens lezen uit een URL

In dit voorbeeld wordt een bestand met de naam Books.xml gebruikt. U kunt uw eigen Books.xml-bestand maken of het voorbeeldbestand gebruiken dat is opgenomen in de QuickStarts van de .NET Software Development Kit (SDK). Dit bestand is ook beschikbaar om te downloaden; raadpleeg het eerste item in de sectie Verwijzingen van dit artikel voor de downloadlocatie.

  1. Kopieer het Books.xml bestand naar de \Inetpub\Wwwroot map op uw computer.

  2. Open Visual Studio.

  3. Maak een nieuwe Visual C#-consoletoepassing. U kunt doorgaan naar de sectie Volledige codevermelding of doorgaan met deze stappen om de toepassing te bouwen.

  4. Geef de using-instructie op voor de System.Xml naamruimte, zodat u de XmlTextReader klassedeclaraties later in uw code niet hoeft te kwalificeren. U moet de using-instructie gebruiken vóór andere declaraties.

    using System.Xml;
    
  5. Haal de XML-stream op met behulp van een URL. Streams worden gebruikt om onafhankelijkheid van het apparaat te bieden; Programmawijzigingen zijn dus niet vereist als de bron van een stream verandert. Declareer een constante voor de http://localhost/books.xml URL. U gebruikt de constante in de volgende stap met XmlTextReader. Voeg het volgende codevoorbeeld toe aan de hoofdprocedure van de standaardklasse:

    String URLString = "http://localhost/books.xml";
    
  6. Maak een exemplaar van de XmlTextReader klasse en geef de URL op. XmlTextReader Normaal gesproken wordt gebruikt als u toegang nodig hebt tot de XML als onbewerkte gegevens zonder de overhead van een Document Object Model (DOM). XmlTextReader Dit biedt dus een sneller mechanisme voor het lezen van de XML. De XmlTextReader klasse heeft verschillende constructors om de locatie van de XML-gegevens op te geven. Met de volgende code wordt een exemplaar van een XmlTextReader object gemaakt en wordt de URL doorgegeven aan de constructor:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Lees de XML.

    Notitie

    Deze stap toont een eenvoudige, buitenste while lus en de volgende twee stappen beschrijven hoe u die lus gebruikt en XML leest.

    Nadat deze is geladen, XmlTextReader voert u sequentiële leesbewerkingen uit om door de XML-gegevens te lopen en gebruikt u de Read methode om de volgende record te verkrijgen. De Read methode retourneert onwaar als er geen records meer zijn.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Inspecteer de knooppunten. Voor het verwerken van de XML-gegevens heeft elke record een knooppunttype dat kan worden bepaald op basis van de NodeType eigenschap. De Name en Value eigenschappen retourneren de naam van het knooppunt (het element en de kenmerknamen) en de knooppuntwaarde (de knooppunttekst) van het huidige knooppunt (of record). De NodeType opsomming bepaalt het knooppunttype. In de volgende voorbeeldcode wordt de naam van de elementen en het documenttype weergegeven.

    Notitie

    In dit voorbeeld worden elementkenmerken genegeerd.

    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. Inspecteer de kenmerken. Elementknooppunttypen kunnen een lijst met kenmerkknooppunten bevatten die eraan zijn gekoppeld. De MovetoNextAttribute methode wordt opeenvolgend door elk kenmerk in het element verplaatst. Gebruik de HasAttributes eigenschap om te testen of het knooppunt kenmerken heeft. De AttributeCount eigenschap retourneert het aantal kenmerken voor het huidige knooppunt.

    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. Bouw uw project en voer het uit.

Volledige codevermelding

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

Voorbeelduitvoer

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

Probleemoplossing

Wanneer u de code test, wordt mogelijk het volgende uitzonderingsfoutbericht weergegeven:

Er is een niet-verwerkte uitzondering van het type System.Xml.XmlException opgetreden in system.xml.dll Aanvullende informatie: Onverwachte XML-declaratie. De XML-declaratie moet het eerste knooppunt in het document zijn en er mogen geen spatietekens worden weergegeven voordat het wordt weergegeven. Lijn 1, positie 4.

De uitzonderingsfout treedt op op de volgende coderegel.

while (reader.Read())

Als u de uitzonderingsfout wilt oplossen, verwijdert u het spatieteken dat voorafgaat aan het eerste knooppunt in het Books.xml document.

Verwijzingen