Flex で結果オブジェクトをループするにはどうすればよいですか?
-
09-06-2019 - |
質問
HTTPService 呼び出しを介して受信した XML データを手動でループするときに問題が発生しています。XML は次のようになります。
<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!');
}
このコードは、1 つ以上の「Row」ノードが返される場合に機能しますが、「Row」ノードが 1 つしかない場合、event.DataTable.Row オブジェクトはエラーではなく、その後コードが中断されるようです。
HTTPService 結果オブジェクトをループする適切な方法は何ですか?何らかのタイプの XMLList コレクションまたは ArrayCollection に変換する必要がありますか?resultFormat を「e4x」に設定しようとしましたが、まだ問題は解決していません...
ありがとう
解決
問題はこの発言にある
event.result.DataTable.Row.length
length
の所有物ではありません XMLList
, 、しかし方法:
event.result.DataTable.Row.length()
混乱しますが、そういうことです。
追加: 実際、最も安全なのは常に for each
反復するときにループする XMLList
そうすれば、間違いを犯すことがなくなり、コードが減り、読みやすくなります。
for each ( var node : XML in event.result.DataTable.Row )
他のヒント
Row 要素が複数存在しない限り、Row は配列ではありません。迷惑です。このようなことをする必要がありますが、しばらく AS3 を書いていないので、existing 関数があるかどうか忘れてしまいました。
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!');
}
これを XML オブジェクトに保存し、そのメソッドを使用して必要なノード値を検索します。
var returnedXml:Xml = new Xml(event.result.toString());
所属していません StackOverflow