我在手动循环通过HTTPService调用接收的XML数据时遇到了问题,XML如下所示:
<DataTable>
<Row>
<text>foo</text>
</Row>
<Row>
<text>bar</text>
</Row>
</DataTable>
当触发WebService结果事件时,我会执行如下操作:
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”节点,那么vent.DataTable.Row对象就不是错误,代码随后就会中断。
循环通过HTTPService结果对象的正确方式是什么?我是否需要将其转换为某种类型的XMLList集合或ArrayCollection?我已尝试将ResultFormat设置为e4x,但仍未解决问题……
谢谢。
3条答案
按热度按时间uemypmqf1#
问题出在这句话里
length
不是XMLList
的属性,而是一种方法:这很令人困惑,但事实就是如此。
XMLList
s上迭代时始终使用for each
循环,这样就不会出错,代码更少,更容易阅读:qyyhg6bp2#
除非有多个Row元素,否则Row不是数组。这是令人讨厌的。您必须这样做,但我已经有一段时间没有编写AS3了,所以我忘记了是否有EXISTS函数。
esyap4oy3#
我会将其存储在一个XML对象中,然后使用它的方法来搜索您需要的节点值。