3

HTTPService 呼び出しを介して受信した xml データを手動でループする際に問題が発生しています。xml は次のようになります。

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

Web サービスの結果イベントが発生すると、次のようにします。

for(var i:int=0;i&lt;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の型に変換する必要がありますか? resultFormat をe4xに設定しようとしましたが、まだ問題を解決していません...

ありがとう。

4

3 に答える 3

4

問題はこの発言にあります

event.result.DataTable.Row.length

lengthは のプロパティでXMLListはなく、メソッドです:

event.result.DataTable.Row.length()

紛らわしいですが、その通りです。

追加:for each実際、最も安全な方法は、sを反復処理するときに常にループを使用することXMLListです。そうすれば、間違いを犯すことがなく、コードが少なくなり、読みやすくなります。

for each ( var node : XML in event.result.DataTable.Row )
于 2008-09-03T05:48:34.180 に答える
2

複数の Row 要素がない限り、Row は配列ではありません。それは迷惑です。このようなことをしなければなりませんが、AS3 をしばらく書いていないので、exists 関数があるかどうかを忘れています。

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!');
}
于 2008-09-02T23:47:13.923 に答える
1

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

var returnedXml:Xml = new Xml(event.result.toString());
于 2008-09-02T23:56:46.100 に答える