Dela via


Använda Visual C# för att läsa XML-data från en URL

Den här artikeln visar hur du använder XmlTextReader klassen för att läsa XML från en URL. Den strömmade informationen kan komma från alla typer av källor, till exempel en byteström från en server, en fil eller en TextReader klass.

Ursprunglig produktversion: Visual Studio
Ursprungligt KB-nummer: 307643

Krav

Den här artikeln förutsätter att du är bekant med följande ämnen:

  • Microsoft Visual Studio
  • XML-terminologi
  • Skapa och läsa XML
  • URL:er och skapa en XML-slutpunkt

Den här artikeln refererar till namnområdet System.Xml.NET Framework klassbibliotek .

Läsa XML-data från en URL

I det här exemplet används en fil med namnet Books.xml. Du kan skapa en egen Books.xml fil eller använda exempelfilen som ingår i snabbstarterna för .NET Software Development Kit (SDK). Den här filen är också tillgänglig för nedladdning. se det första objektet i avsnittet Referenser i den här artikeln för nedladdningsplatsen.

  1. Kopiera Books.xml-filen till \Inetpub\Wwwroot mappen på datorn.

  2. Öppna Visual Studio.

  3. Skapa ett nytt Visual C#-konsolprogram. Du kan antingen fortsätta till avsnittet Fullständig kodlista eller fortsätta med de här stegen för att skapa programmet.

  4. Ange användningsdirektivet för System.Xml namnområdet så att du inte behöver kvalificera XmlTextReader klassdeklarationerna senare i koden. Du måste använda användningsdirektivet före andra deklarationer.

    using System.Xml;
    
  5. Hämta XML-dataströmmen med hjälp av en URL. Strömmar används för att ge oberoende från enheten; Därför krävs inte programändringar om källan till en ström ändras. Deklarera en konstant för http://localhost/books.xml URL:en. Du använder konstanten i nästa steg med XmlTextReader. Lägg till följande kodexempel i huvudproceduren för standardklassen:

    String URLString = "http://localhost/books.xml";
    
  6. Skapa en instans av XmlTextReader klassen och ange URL:en. XmlTextReader Används vanligtvis om du behöver komma åt XML som rådata utan att behöva använda en dokumentobjektmodell (DOM), vilket XmlTextReader ger en snabbare mekanism för att läsa XML-koden. Klassen XmlTextReader har olika konstruktorer för att ange platsen för XML-data. Följande kod skapar en instans av ett XmlTextReader objekt och skickar URL:en till konstruktorn:

    XmlTextReader reader = new XmlTextReader (URLString);
    
  7. Läs igenom XML-koden.

    Obs!

    Det här steget visar en grundläggande, yttre while loop och följande två steg beskriver hur du använder den loopen och läser XML.

    När den har lästs XmlTextReader in utför du sekventiella läsningar för att flytta över XML-data och använder Read metoden för att hämta nästa post. Metoden Read returnerar false om det inte finns några fler poster.

    while (reader.Read())
    {
        // Do some work here on the data.
        Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    
  8. Granska noderna. För att bearbeta XML-data har varje post en nodtyp som kan fastställas från NodeType egenskapen . Egenskaperna Name och Value returnerar nodnamnet (element- och attributnamnen) och nodvärdet (nodtexten) för den aktuella noden (eller posten). Uppräkningen NodeType avgör nodtypen. Följande exempelkod visar namnet på elementen och dokumenttypen.

    Obs!

    I det här exemplet ignoreras elementattribut.

    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. Granska attributen. Elementnodtyper kan innehålla en lista över attributnoder som är associerade med dem. Metoden MovetoNextAttribute flyttas sekventiellt genom varje attribut i -elementet. Använd egenskapen HasAttributes för att testa om noden har några attribut. Egenskapen AttributeCount returnerar antalet attribut för den aktuella noden.

    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. Skapa och kör projektet.

Fullständig kodlista

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

Exempelutdata

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

Felsökning

När du testar koden kan följande felmeddelande visas:

Ett ohanterat undantag av typen System.Xml. XmlException inträffade i system.xml.dll Ytterligare information: Oväntad XML-deklaration. XML-deklarationen måste vara den första noden i dokumentet och inga blankstegstecken får visas före den. Linje 1, position 4.

Undantagsfelet inträffar på följande kodrad.

while (reader.Read())

Lös undantagsfelet genom att ta bort blankstegstecknet som föregår den första noden i dokumentetBooks.xml .

Referenser