Laden...

XML Stream auslesen

Erstellt von userid4106 vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.077 Views
U
userid4106 Themenstarter:in
457 Beiträge seit 2006
vor 14 Jahren
XML Stream auslesen

Hallo,

ich habe nicht direkt ein Problem aber ich würde gerne etwas sauber ausprogrammieren.
Ich lese über ein HttpWebResponse eine XML ein. Aus dieser XML entferne ich eine Signatur und habe zum Schluss einen byte Array zum arbeiten. Eine XML Antwort sieht dann z.B. so aus:


<?xml version="1.0" encoding="utf-8"?>
<xxxResponse>
  <Header>
    <ReturnStatus>
      <ReturnCode>1</ReturnCode>
      <ReturnDescription>anyType</ReturnDescription>
    </ReturnStatus>
  </Header>
</xxxesponse>

Nun habe ich es quick&dirty gemacht.


                        System.Text.Encoding encoder = System.Text.Encoding.UTF8;
                        string Rückgabe = encoder.GetString(decoded_data);

Ich habe also ganz stumpf den byte Array(decoded_data) in einen String umgewandelt um dann über "contains" den ReturnCode auszulesen. Eigentlich ist das immer eindeutig zu identifizieren. Hab dann also immer mit der Zeichenfolge ">1<" oder ">1000<" usw verglichen. ReturnCodes wurden festgelegt und liegen mir vor. Nur finde ich die Methode nicht ganz sauber und würde das gerne etwas eleganter machen.

Ich habe dann mal das byte Array über einen Stream eingelesen.


                        MemoryStream Antwort = new MemoryStream(decoded_data);
                        XmlTextReader XML_Antwort = new XmlTextReader(Antwort);

Aber irgendwie weiß ich jetzt nicht weiter. Wie bekomme ich denn meinen RetunCode? Also das was in dem Attribut steht. Ich bin kein XML Spezi und würde mich über jede Antwort freuen.

U
userid4106 Themenstarter:in
457 Beiträge seit 2006
vor 14 Jahren

                        MemoryStream Antwort = new MemoryStream(decoded_data);
                        XmlTextReader XML_Antwort = new XmlTextReader(Antwort);
                        XML_Antwort.MoveToContent();
                        int Rückgabe = -1;

                        while (!XML_Antwort.EOF)
                        {
                            XML_Antwort.ReadToFollowing("ReturnCode");
                            Rückgabe = XML_Antwort.ReadElementContentAsInt()
                            if (Rückgabe != -1) break;
                        }

3.971 Beiträge seit 2006
vor 14 Jahren

Hallo SecondSun,
es gibt mehrere Möglichkeiten:*XmlReader (im Grunde deine Variante) *XPath mittels XmlDocument oder XPathDocument


XmlDocument xDoc = new XmlDocument();
xDoc.Load(XML_Antwort);
XmlNode node = xDoc.SelectSingleNode("/xxxResponse/Header/ReturnStatus/ReturnCode");

*Und natürlich Linq To Xml

Zwei Hinweise am Rande, verwende bitte using bei Klassen, die das IDisposable-Interface implementieren (Streams, TextReader, TextWriter etc.).

Und XmlTextReader (und -Writer) gibt es nurnoch aus kompatibilitätsgründen, verwende bitte XmlReader.Create oder XmlWriter.Create (auch using)

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo zusammen,

kleines_eichhoernchen hat schon die Möglichkeiten aufgezählt. Ich wollte nur folgende Informationsquelle hinzufügen:

Microsoft Support - Lesen von XML Streams

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”