2008-09-02 3 views
2
私は手動でHTTPService呼び出しを介して受信されたXMLデータをループ問題があります

は、XMLは次のようになります。どのようにFlexで結果オブジェクトをループするのですか?

 

<DataTable> 
    <Row> 
     <text>foo</text> 
    </Row> 
    <Row> 
     <text>bar</text> 
    </Row> 
</DataTable> 
 

webservie結果イベントは、私がこのような何かを発射した場合:

 

for(var i:int=0;i<event.result.DataTable.Row.length;i++) 
{ 
    if(event.result.DataTable.Row[i].text == "foo") 
     mx.controls.Alert.show('foo found!'); 

} 
 

このコードは、 "Row"ノードが1つしかない場合は、event.DataTable.Rowオブジェクトがエラーではなく、その後コードが破損しているように見えます。

HTTPServiceの結果オブジェクトをループする適切な方法は何ですか?それを何らかのタイプのXMLListコレクションまたはArrayCollectionに変換する必要がありますか?複数行の要素がある場合を除き

答えて

4

問題が

event.result.DataTable.Row.length 

lengthXMLListのプロパティではありません。この文であるが、この方法は:

event.result.DataTable.Row.length() 

それは混乱だが、それはそれは方法です。

追加:実際に、実行する最も安全な事は常にXMLListオーバーSを反復する場合、その方法あなたがミスを犯すことはありません、それは読むために以下のコードだし、簡単にfor eachループを使用することです:

for each (var node : XML in event.result.DataTable.Row) 
2

行は配列ではありません...

感謝を私は「E4X」へのresultFormatを設定しようとしていると、それはまだ問題を解決する必要があります。それは迷惑です。あなたはこのようなことをしなければなりませんが、私はしばらくのうちにAS3を書いていないので、存在する機能があるかどうか忘れてしまいます。

if (exists(event.result.DataTable) && exists(event.result.DataTable.Row)){ 
    if (exists(event.result.DataTable.Row.length)) { 
    for(var i:int=0;i<event.result.DataTable.Row.length;i++) 
    { 
     if (exists(event.result.DataTable.Row[i].text) 
     && "foo" == event.result.DataTable.Row[i].text) 
      mx.controls.Alert.show('foo found!'); 
    } 
    } 
    if (exists(event.result.DataTable.Row.text) 
    && "foo" == event.result.DataTable.Row.text) 
     mx.controls.Alert.show('foo found!'); 
} 
1

これをXmlオブジェクトに格納し、そのメソッドを使用して必要なノード値を検索します。

var returnedXml:Xml = new Xml(event.result.toString());