Frage

Ich versuche, den folgenden XML-Stream zu lesen, aber mir wirklich zu kämpfen.

<channelSnapshot xmlns="urn:betfair:games:api:v1">
<channel gameType="BLACKJACK" id="1444077" name="Exchange BlackJack">
<status>RUNNING</status>
<game id="190675">
<round>1</round>
<bettingWindowTime>30</bettingWindowTime>
<bettingWindowPercentageComplete>100</bettingWindowPercentageComplete>
<gameData>
<object name="Player 1">
<description/>
<status>IN_PLAY</status>
<property name="Card 1" value="NOT AVAILABLE"/>
<property name="Card 2" value="NOT AVAILABLE"/>
</object>

Der Strom wird in der folgenden Art und Weise erworben

  Dim dataStream As Stream = response.GetResponseStream()
  Dim reader As New XmlTextReader(dataStream)

Wenn das Element zwischen einem Start-Tag und End-Tag wie

 <status>RUNNING</status>

Dann kann ich den Wert ok zugreifen. Ich habe Select Case XMLNodeType wurde verwenden, aber mit diesem, wenn der nodetype ein Leerzeichen ist Ich kann nicht über die whitespace.So das Element erhalten, dass in der folgenden Zeile

 <property name="Card 1" value="NOT AVAILABLE"/>

Ich kann nicht über das Wort-Eigenschaft auf etwas bekommen.

Wie muss klar sein, das alles neu für mich ist, so würde ich alle und jede Hilfe willkommen.

War es hilfreich?

Lösung

Wie über einen anderen Ansatz? Die Verarbeitung der Strom, wie Sie zur Zeit tun werden scheint ziemlich harte Arbeit zu sein.

Wenn Sie stattdessen den ganzen Strom in einen String lesen und laden Sie dann diese Zeichenfolge in ein XDocument Sie in der Lage sein, die Datei viel einfacher zu verarbeiten.

VB ermöglicht es Ihnen, Daten aus XML-Dateien in einer sehr einfachen Art und Weise zugreifen können, einen Blick auf den folgenden Code, um zu sehen, was ich meine:

' get the response stream so we can read it
Dim responseStream = response.GetResponseStream()
' create a stream reader to read the response
Dim responseReader = New IO.StreamReader(responseStream)
' read the response text (this should be javascript)
Dim responseText = responseReader.ReadToEnd()

' load the response into an XDocument
Dim xmlDocument = XDocument.Parse(responseText)

' find all the player objects from the document
For Each playerObject In xmlDocument...<object>

    ' display the player's name (this is how you access an attribute)
    Console.WriteLine("Player name: {0}", playerObject.@name)
    ' display the player's status (this is how you access an element)
    Console.WriteLine("Player status: {0}", playerObject.<status>.Value)

Next

Um Ihre Spieler Eigenschaften Sie Folgendes tun können:

' go through the player's properties
For Each playerProperty In playerObject...<property>
    ' output the values
    Console.WriteLine("Player property name: {0}", playerProperty.@name)
    Console.WriteLine("Player property value: {0}", playerProperty.@value)
Next

Als jemand anders erwähnt, ist Ihr Xml ist fehlerhaft, aber die XDocument werden Sie darüber erzählen, so werden Sie in der Lage sein, es zu beheben.

Andere Tipps

Sie müssen sie als Attribut lesen. Sehen Sie sich die GetAttribute () -Methode.

Zum Beispiel:

Dim cardName as String = reader.GetAttribute("name")

Sie sollten prüfen, mit XmlReaderSettings beim Erstellen Ihre XmlReader zur Vereinfachung der zugrunde liegenden Stream-Parsing (dh XmlReaderSettings. ignoreWhitespace ).

Dann sollten Sie den Strom in einer Art und Weise zu analysieren, ähnlich dem folgenden können.

using (XmlReader reader = XmlReader.Create(dataStream))
{
    while(reader.Read())
    {
        switch(reader.NodeType)
        {
            case XmlNodeType.Element:
            // do something

            case XmlNodeType.Attribute:
            // do something

            // etc...
        }
    }
}

Außerdem die Eigenschaften rel="nofollow und < a href = "http://msdn.microsoft.com/en-us/library/system.xml.xmlreader_methods.aspx" rel = "nofollow noreferrer"> Methoden die

Ihre XML ist nicht wohlgeformt. Sie haben keine engen Tags offen Tags bekommen. Wenn Sie Ihre XML eingerückt hätte, hätte man gesehen.

Auch wenn Sie .NET 1.1 stecken verwenden, sollten Sie nicht XmlTextReader verwenden. Verwenden Sie XmlReader.Create.

Neben der Verwendung von XmlReader direkt, könnte man bei LINQ to XML aussehen soll, die für die Suche XML ein etwas einfacheres Modell bietet, oder die ältere XmlDocument, die Sie von einem XmlReader laden können.

scroll top