SO WIRD'S GEMACHT: Lesen von XML-Daten aus einem Stream

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 301228 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D301228
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
301228 HOW TO: Read XML Data from a Stream
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Beitrag veranschaulicht die Verwendung der Klasse XmlTextReader zum Lesen von XML-Daten (Extensible Markup Language) aus einem Stream. Der Stream kann aus einer Vielzahl von Quellen stammen, wie z. B. einem Bytestream von einem Server, einer Datei oder einer TextReader -Klasse.

Anforderungen

Die folgende Liste nennt die empfohlene Hardware, Software, Netzwerkinfrastruktur sowie die Service Packs, die benötigt werden:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server oder WIndows NT 4.0 Server
  • Microsoft Visual Studio .NET
Dieser Beitrag geht von der Annahme aus, dass Sie mit den folgenden Themen vertraut sind:
  • XML-Terminologie
  • Erstellen und Lesen von XML

So lesen Sie XML-Daten aus einem Stream

  1. Öffnen Sie Visual Studio .NET.
  2. Erstellen Sie eine neue Microsoft Visual Basic- (VB) oder Microsoft Visual C#-Konsolenanwendung.

    HINWEIS : Die folgenden Schritte bieten eine detaillierte Beschreibung, wie die Anwendung generiert wird. Sie können jedoch auch direkt mit Schritt 10 fortfahren, in dem vollständiger Code bereitgestellt wird.
  3. Stellen Sie sicher, dass das Projekt einen Verweis auf die Namespaces System.Xml und System.IO enthält.
  4. Verwenden Sie die Anweisung IMPORTS für den Namespace Xml , damit Sie nicht an späterer Stelle im Code XmlTextReader -Deklarationen für diesen Namespace qualifizieren müssen. Die Anweisung IMPORTS muss vor allen anderen Deklarationen verwendet werden, und zwar in folgender Weise:
    Visual Basic .NET-Code
    Imports System.Xml
    Imports System.IO
    Visual C#-Code
    using System.Xml;
    using System.IO;
  5. Erstellen oder Abrufen des XML-Streams. Ein Stream ist eine abstrakte Darstellung eines Eingabe- oder Ausgabegeräts, das die Quelle von oder das Ziel für Daten darstellt (in diesem Fall XML-Daten). Sie können in einen Stream schreiben oder aus ihm lesen, was Sie sich am besten als einen Fluss von Bytes vorstellen können.

    Streams werden verwendet, um Unabhängigkeit vom Gerät zu erreichen und daher Programmänderungen überflüssig zu machen, wenn sich beispielsweise die Quelle eines Streams ändert. Es existieren einige verschiedene Verfahren, einen Stream für die Klasse XmlTextReader zu erstellen. Wählen Sie eins der folgenden Codebeispiele aus, um es der Prozedur Main des Standardmoduls hinzuzufügen:
    • Codebeispiel, das das Objekt StringReader verwendet:

      Das Objekt StringReader liest Zeichen aus Zeichenfolgen und nimmt bei der Konstruktion einen Zeichenfolgenwert an. Visual Basic .NET-Code
      Dim stream as System.IO.StringReader
      stream = new StringReader("<?xml version='1.0'?>" & _
      "<!-- Diese Datei stellt das Inventar einer Buchhandlung dar. -->" & _
      "<bookstore>" & _
      " <book genre=""autobiography"" ISBN=""1-861003-11-0"">" & _
      "   <title>Die Autobiografie von Benjamin Franklin</title>" & _
      "   <author>" & _
      "       <first-name>Benjamin</first-name>" & _
      "       <last-name>Franklin</last-name>" & _
      "   </author>" & _
      "   <price>8.99</price>" & _
      " </book>" & _
      "</bookstore>")
      C#-Code
      StringReader stream;
      stream = new StringReader("<?xml version='1.0'?>" +
      	"<!-- Diese Datei stellt ein Teilstück der Inventardatenbank einer Buchhandlung dar. -->" +
      	"<bookstore>" +
      	" <book genre=\"autobiography\" publicationdate=\"1981\" ISBN=\"1-861003-11-0\">" +
      	"   <title>Die Autobiografie von 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>Platon</name>" +
      	"   </author>" +
      	"   <price>9.99</price>" +
      	" </book>" +
      	"</bookstore>");
    • Codebeispiel, das das Objekt StreamReader verwendet:

      Das Objekt StreamReader wird verwendet, um Zeichen aus Dateien zu lesen. Es liest den Namen der zu lesenden Datei bei der Konstruktion ein: Visual Basic .NET-Code
      Dim stream as System.IO.StreamReader
      ' Lädt die XML-Daten in der Datei <B>books.xml</B> in einen neuen Stream.
      stream = New StreamReader ("books.xml")
      C#-Code
      System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");
      Beachten Sie, dass hier die Datei Books.xml verwendet wird. Sie können Ihre eigene Datei Books.xml erstellen. Eine Beispieldatei Books.xml wird außerdem mit Visual Studio .Net und dem .Net-Framework-SDK geliefert.

  6. Konstruieren Sie eine Klasse XmlTextReader mit dem Stream. Normalerweise wird XmlTextReader verwendet, wenn Sie auf die XML-Daten als Rohdaten zugreifen müssen, ohne den Mehraufwand des Dokumentobjektmodells (DOM oder Document Object Model); daher stellt XmlTextReader ein schnelleres Verfahren für das Lesen von XML bereit. XmlTextReader verfügt über verschiedene Konstruktoren, um den Speicherort der XML-Daten anzugeben. Der folgende Code liest XmlTextReader aus einem Stream:
    Visual Basic .NET-Code
    Dim reader As XmlTextReader = New XmlTextReader (stream)
    C#-Code
    XmlTextReader reader = null;	
    reader = new XmlTextReader (stream);
  7. Durchlesen der XML-Daten. Nach dem Laden führt XmlTextReader sequenzielle Lesevorgänge durch, um sich durch die XML-Daten zu bewegen, und verwendet die Methode Read , um den nächsten Datensatz abzurufen. XmlTextReader gibt false zurück, wenn keine weiteren Datensätze mehr vorhanden sind.
    Visual Basic .NET-Code
    Do While (reader.Read())
     ' Verarbeitung der Daten.
     Console.WriteLine(reader.Name)
    Loop
    
    ' Das Lesen der XML-Datei ist abgeschlossen.
    Console.ReadLine() 'Pause
    C#-Code
    while (reader.Read()) 
    {
        // Verarbeitung der Daten.
        ...
    }
    
    while (reader.Read()) 
    {
        // Verarbeitung der Daten.
    	Console.WriteLine(reader.Name);<
    }
    Console.ReadLine();
  8. Untersuchen der Knoten. Zum Verarbeiten der XML-Daten verfügt jeder Datensatz über einen Knotentyp, der anhand der Eigenschaft NodeType bestimmt werden kann. Die Eigenschaften Name und Value geben den Knotennamen (die Element- und Attributnamen) und den Knotenwert (den Knotentext) des aktuellen Knotens (oder Datensatzes) zurück. Die Auflistung NodeType bestimmt den Knotentyp. Das folgende Beispiel zeigt den Namen der Elemente und den Dokumenttyp an. Beachten Sie, dass in diesem Beispiel Elementattribute ignoriert werden.
    Visual Basic .NET-Code
    Do While (reader.Read())
    Select Case reader.NodeType
    Case XmlNodeType.Element 'Anfang der Elementanzeige.
    Console.Write("<" + reader.Name)
    Console.WriteLine(">")
    Case XmlNodeType.Text 'Anzeige des Textes in jedem der Elemente.
    Console.WriteLine(reader.Value)
    Case XmlNodeType.EndElement 'Ende der Elementanzeige.
    Console.Write("</" + reader.Name)
    Console.WriteLine(">")
    End Select
    Loop
    C#-Code
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
             case XmlNodeType.Element: // Der Knoten ist ein Element.
                 Console.Write("<" + reader.Name);
       Console.WriteLine(">");
                 break;
      case XmlNodeType.Text: //Anzeige des Textes in jedem der Elemente.
                 Console.WriteLine (reader.Value);
                 break;
      case XmlNodeType. EndElement: //Ende der Elementanzeige.
                 Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                 break;
        }
    }
  9. Untersuchen der Attribute. Elementknotentypen können eine Liste von Attributknoten umfassen, die ihnen zugeordnet sind. Die Methode MovetoNextAttribute durchläuft der Reihe nach die Attribute im jeweiligen Element. Verwenden Sie die Eigenschaft HasAttributes , um zu testen, ob der Knoten Attribute aufweist. Die Eigenschaft AttributeCount gibt die Zahl der Attribute für den aktuellen Knoten zurück.
    Visual Basic .NET-Code
    Do While (reader.Read())
    Select Case reader.NodeType
    Case XmlNodeType.Element 'Anfang der Elementanzeige.
    Console.Write("<" + reader.Name)
    	 If reader.HasAttributes Then 'Wenn Attribute vorhanden sind
     		While reader.MoveToNextAttribute() 
    					'Attributnamen und -wert anzeigen.
    Console.Write(" {0}='{1}'", reader.Name, reader.Value)
    End While
    End If
    Console.WriteLine(">")
    Case XmlNodeType.Text 'Anzeige des Textes in jedem der Elemente.
    Console.WriteLine(reader.Value)
    Case XmlNodeType.EndElement 'Ende der Elementanzeige.
    Console.Write("</" + reader.Name)
    Console.WriteLine(">")
    End Select
    Loop
    C#-Code
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
    	case XmlNodeType.Element: // Der Knoten ist ein Element.
    	    Console.Write("<" + reader.Name);
    
    	    while (reader.MoveToNextAttribute()) // Attribute lesen.
    		Console.Write(" " + reader.Name + "='" + reader.Value + "'");
    	    Console.Write(">");
        Console.WriteLine(">");
    	     break;
       case XmlNodeType.Text: //Anzeige des Textes in jedem der Elemente.
    	     Console.WriteLine (reader.Value);
    	     break;
       case XmlNodeType. EndElement: //Ende der Elementanzeige.
    	     Console.Write("</" + reader.Name);
        Console.WriteLine(">");
    	     break;
         }
    }

  10. Der Bequemlichkeit halber steht hier vollständiger Code zur Verfügung.
    Visual Basic.Net-Code
    Imports System.Xml
    Imports System.IO
    Module Module1
    
        Sub Main()
    	Dim stream As System.IO.StreamReader
    	' Lädt die XML-Daten in der Datei <B>books.xml</B> in einen neuen Stream.
    	stream = New StreamReader("books.xml")
    	Dim reader As XmlTextReader = New XmlTextReader(stream)
    	Do While (reader.Read())
    	    Select Case reader.NodeType
    		Case XmlNodeType.Element 'Anfang der Elementanzeige.
    		    Console.Write("<" + reader.Name)
    		    If reader.HasAttributes Then 'Wenn Attribute vorhanden sind
    			While reader.MoveToNextAttribute()
    			    'Attributnamen und -wert anzeigen.
    			    Console.Write(" {0}='{1}'", reader.Name, reader.Value)
    			End While
    		    End If
    		    Console.WriteLine(">")
    	        Case XmlNodeType.Text 'Anzeige des Textes in jedem der Elemente.
    		    Console.WriteLine(reader.Value)
    		Case XmlNodeType.EndElement 'Ende der Elementanzeige.
    		    Console.Write("</" + reader.Name)
    		    Console.WriteLine(">")
    	    End Select
    	Loop
        End Sub
    
    End Module

    C#-Code
    using System;
    using System.Xml;
    using System.IO;
    namespace ReadXMLFromStream
    {
    	/// <summary>
    	/// Zusammenfassende Beschreibung für Class1.
    	/// </summary>
    	class Class1
    	{
    		static void Main(string[] args)
    		{
    
    			System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");
    			XmlTextReader reader = null;
    			reader = new XmlTextReader (stream);
    			while (reader.Read())
    			{
    				switch (reader.NodeType)
    				{
    					case XmlNodeType.Element: // Der Knoten ist ein Element.
    						Console.Write("<" + reader.Name);
    
    						while (reader.MoveToNextAttribute()) // Attribute lesen.
    							Console.Write(" " + reader.Name + "='" + reader.Value + "'");
    						Console.Write(">");
    						Console.WriteLine(">");
    						break;
    					case XmlNodeType.Text: //Anzeige des Textes in jedem der Elemente.
    						Console.WriteLine (reader.Value);
    						break;
    					case XmlNodeType. EndElement: //Ende der Elementanzeige.
    						Console.Write("</" + reader.Name);
    						Console.WriteLine(">");
    						break;
    				}
    			}
    
    		}
    	}
    }
    
  11. Speichern Sie das Projekt, und führen Sie es aus.

VERWEISE

Weitere Informationen finden Sie im Beitrag "XML in Microsoft .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation" im MSDN Magazine auf der folgenden Microsoft-Website:
http://msdn.microsoft.com/library/periodic/period01/xml0101.htm
Weitere Informationen über die Klassen XmlReader, StreamReader und StringReader finden Sie in der Microsoft .NET-Framework Class Library-Dokumentation.

Weitere Informationen über das Verwenden von XmlReader zum Lesen von XML-Daten finden Sie im Microsoft .NET-Framework Developer's Guide.



Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Eigenschaften

Artikel-ID: 301228 - Geändert am: Donnerstag, 25. Oktober 2001 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework Software Development Kit 1.0
Keywords: 
kbhowto kbhowtomaster kbxml tslic_tslic KB301228
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com