2009-07-09 20 views
1

次のXMLストリームを読み込もうとしていますが、本当に苦労しています。xmlストリームを読む

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

ストリームは、要素は、

<status>RUNNING</status> 

として開始タグと終了タグの間にある場合、私はOK値にアクセスすることができ、以下のよう

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

で取得されます。 私は選択ケースXMLNodeTypeがを使用しますがNODETYPEが、私は次の行

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

に私は越えて何を取得傾けることwhitespace.Soを超えた要素に到達することはできません空白 あるとき、これを使用しています単語のプロパティ。

これは私には全く新しいものなので、すべての助けを歓迎します。

答えて

1

別のアプローチはどうですか?あなたが現在行っているようにストリームを処理するのはかなり難しい作業です。

ストリーム全体を文字列に読み込み、その文字列をXDocumentにロードすると、ファイルを簡単に処理できるようになります。

VBあなたは私が何を意味するか確認するために、次のコードを見てみましょう、非常に簡単な方法でXMLファイルからデータにアクセスすることができます:

' 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 

次の操作を行うことができ、あなたのプレーヤーのプロパティを取得するには:他に言及した誰かとして

' 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 

、あなたのXMLは不正な形式ですが、あなたはそれを修正することができますのでXDocumentはこれについて教えてくれます。

+0

お返事いただいた皆様、ありがとうございます!すべての答えは有用であると証明され、私はそれらのすべてから何かを学びました。私は私のプロジェクトを完了するために私が知る必要があるすべてをまだ知っているかどうかはわかりませんが、進歩が最も確実に行われました。もう一度皆さんに感謝します。 –

+0

あなたのプロジェクトでスマイリー、幸運を助けてくれることを嬉しく思います:-) –

0

属性として読み込む必要があります。 GetAttribute()メソッドを参照してください。例えば

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

あなたのXmlReaderを作成する際に基本となるストリーム(すなわちXmlReaderSettings.IgnoreWhitespace)を解析する単純化するためにXmlReaderSettingsを使用することを検討すべきです。

次に、次のような方法でストリームを解析できるはずです。

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

      case XmlNodeType.Attribute: 
      // do something 

      // etc... 
     } 
    } 
} 

また、要素、属性、および他のXMLエンティティで取得する方法を決定するためにXmlReaderベースクラスのpropertiesmethodsを点検。

0

あなたのXMLは整形式ではありません。近いタグのない公開タグがあります。あなたのXMLをインデントしたなら、あなたはそれを見たでしょう。

また、.NET 1.1を使用していない限り、XmlTextReaderは使用しないでください。 XmlReader.Createを使用します。

XmlReaderを直接使用するだけでなく、LINQ to XMLを使用すると、XMLを検索するためのモデルや、XmlReaderから読み込むことができる古いXmlDocumentを使用できます。