2009-07-09 11 views
1

Ich versuche, den folgenden XML-Stream zu lesen, aber ich kämpfe wirklich.einen XML-Stream lesen

<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 Zugriff ist. Ich habe dies Select Case XMLNodeType worden verwenden, aber zu verwenden, wenn die nodetype ein Leerzeichen ist ich nicht über die whitespace.So auf das Element bekommen, dass

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

ich in der folgenden Zeile zu etwas über die cant get Worteigenschaft.

Da muss offensichtlich sein, dass dies alles neu für mich ist, so würde ich alle und jede Hilfe begrüßen.

Antwort

1

Wie wäre es mit einem anderen Ansatz? Den Stream so zu bearbeiten, wie Sie es gerade tun, scheint eine ziemlich harte Arbeit zu sein.

Wenn Sie stattdessen den gesamten Stream in eine Zeichenfolge lesen und dann diese Zeichenfolge in eine XDocument laden, können Sie die Datei viel einfacher 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}", [email protected]) 
    ' 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 erhalten Sie folgendes tun:

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

Als jemand anders erwähnt, Ihre XML verformt, aber die XDocument werden Sie darüber erzählen so dass Sie es beheben sein können.

+0

Hey vielen Dank an alle, die geantwortet haben! Alle Antworten erwiesen sich als nützlich und ich habe von allen etwas gelernt. Ich bin mir nicht sicher, ob ich noch alles weiß, was ich wissen muss, um mein Projekt abzuschließen, aber der Fortschritt ist definitiv gemacht worden; Also vielen Dank noch einmal. –

+0

Gerne helfen wir Smiley, viel Glück mit Ihrem Projekt :-) –

0

Sie müssen sie als Attribute lesen. Siehe die GetAttribute() Methode.

Zum Beispiel:

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

Sie berücksichtigen sollten XmlReaderSettings verwenden, wenn Ihre XmlReader Erstellung zur Vereinfachung des zugrunde liegenden Stream-Parsing (d XmlReaderSettings.IgnoreWhitespace).

Dann sollten Sie in der Lage sein, den Stream in einer ähnlichen Weise wie folgt zu parsen.

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

      case XmlNodeType.Attribute: 
      // do something 

      // etc... 
     } 
    } 
} 

Auch die properties und methods der XmlReader Basisklasse untersuchen, um zu bestimmen, wie auf Elemente zu erhalten, Attribute und andere XML-Entitäten.

0

Ihr XML ist nicht wohlgeformt. Sie haben offene Tags ohne enge Tags. Wenn Sie Ihr XML eingerückt hätten, hätten Sie das gesehen.

Wenn Sie nicht mit .NET 1.1 festgefahren sind, sollten Sie auch keinen XmlTextReader verwenden. Verwenden Sie XmlReader.Create.

Neben der direkten Verwendung von XmlReader können Sie auch LINQ to XML betrachten, das ein etwas einfacheres Modell für die XML-Suche bietet, oder das ältere XmlDocument, das Sie von einem XmlReader laden können.

Verwandte Themen