带有重复节点的arraycollection

时间:2011-01-27 21:19:09

标签: xml flex mxml arraycollection

在HTTPService调用的resultHandler中,我已经为repeatCollection分配了一个重复节点。在重复节点内部是有时重复的其他节点,有时不重复。例如,此处选项节点在选项内重复。

<response> 
   <options>
      <option> <var1> part1 </var1> <var2> part2 </var2> </option>
      <option> <var1> part1 </var1> <var2> part2 </var2> </option>
   </options>
   <options>....
</response>

有时它不会重复,就像这样。

 <response> 
       <options>
          <option> <var1> part1 </var1> <var2> part2 </var2> </option>
       </options>
       <options>....
 </response>

我在for循环中遇到了actionscript错误。我如何解释这两种情况?

这是我的for循环将对象分配给值对象:

protected function xml_resultHandler(event:ResultEvent):void
  {
  var data:ArrayCollection = xml.lastResult.response.option;
  var valueobjects:valueObject;

  for each (var characteristic:Object in data)
   {
                        valueobject = new valueobject;
                        valueobject.var1 = characteristic.option[0].var1;
                        valueobject.var2 = characteristic.option.var2;
                        datamodel.addItem(valueobject);
                    }

}

在此示例代码中,如果没有多个选项节点,则分配var1将中断,如果有多个对象节点,则var2将中断。我可以把它分开并分别迭代它们,但是有更有说服力的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这样可以吗

protected function xml_resultHandler(event:ResultEvent):void
{
    var data:ArrayCollection = xml.lastResult.response.option;
    var valueobjects:valueObject;

    for each (var characteristic:Object in data)
    {
                    valueobject = new valueobject;
                    if(characteristic.option is ArrayCollection)
                        valueobject.var1 = characteristic.option[0].var1;
                    else
                        valueobject.var2 = characteristic.option.var2;
                    datamodel.addItem(valueobject);
    }
}

我已经使用了与结果处理程序非常类似的东西,我不确定数据是否包含1行或多行并且它似乎可以解决这个问题,似乎在使用点运算符进行E4X解析时,它将要么根据多重性返回一个对象或一个arraycollection。