0

我有以下问题:

我的 web 服务应用程序按以下顺序返回 xml 数据:

<my_claims>
  <claim>
    <opponent>Oleg</opponent>
    <rank>2000</rank>
  </claim>
</my_claims>

其中声明节点的数量,可以是 0,1,以此类推。

我如何正确处理从服务接收到的数据。目前,当我尝试将索赔数据存储为数组集合时,例如

this.Claims = event.result.my_claims.claim;

public function set Claims(array:ArrayCollection):void
{
    this.claims = array;
}

我收到错误消息:

TypeError:错误 #1034:类型强制失败:无法将 mx.utils::ObjectProxy@1f94ca19 转换为 mx.collections.ArrayCollection。

据我了解,Flex 将其作为 XmlObject 处理,但在服务列表中有几个项目后,一切正常:

(带有多个声明的示例) Oleg 2000 测试 2000

4

3 回答 3

2

请改用 xmllist 集合。this.Claims = new XMLListCollection(event.result.my_claims.claim);您需要更新您的索赔功能以匹配

于 2009-08-12T14:57:38.970 回答
1

尝试像这样设置你的arraycollection:

if( event.result.my_claims.claim is ArrayCollection ){
  this.claims = event.result.my_claims.claim as ArrayCollection;

}
else{
  this.claims = new ArrayCollection( [event.result.my_claims.claim] );
}

如果结果只有 1 项,则会出现此错误

于 2009-08-12T14:58:26.207 回答
1

我自己以前也遇到过。Adobe 关于遍历 XML 结构的文档在这一点上并不十分清楚。

他们的文档指出,如果有多个具有特定名称的元素,则必须使用数组索引表示法来访问它:

var testXML:XML = <base>
    <book>foo</book>
    <book>bar</book>
</base>

var firstBook:XML = testXML.book[0];

然后继续说,如果只有一个具有特定名称的元素,那么您可以省略数组索引表示法:

var testXML:XML = <base>
    <book>foo</book>
</base>

var firstBook:XML = testXML.book;

这意味着当您尝试强制强制转换为 Array 类型时,它不起作用,因为它将单个元素视为 XMLNode 而不是 XMLList。

如果幸运的话,您可以检查节点上的子<my_claims>节点数量,然后决定是否要扭曲 an 中的单个元素,ArrayCollection或者是否可以使用自动强制来处理多个元素。

于 2009-08-12T15:09:31.743 回答