коллекция массивов с повторяющимися узлами

В обработчике результата вызова HTTPService я назначил повторяющийся узел коллекции arrayCollection. Внутри этого повторяющегося узла находятся другие узлы, которые иногда повторяются, а иногда нет. Например, здесь узел option повторяется внутри options.

<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>

Я сталкиваюсь с ошибками actionscript в цикле for. Как объяснить оба случая?

Вот мой цикл 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 не будет работать, если нет нескольких узлов option, а var2 не будет работать, если есть несколько узлов object. Я мог бы разбить его на части и перебирать их по отдельности, но есть ли более красноречивое решение?


person ToneLoc    schedule 27.01.2011    source источник


Ответы (1)


Будет ли это хорошо

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 он либо вернет объект или набор массивов в зависимости от кратности.

person shaunhusain    schedule 27.01.2011
comment
Да, спасибо за ваш вклад. Знание того, что я могу проверить, является ли узел коллекцией массивов, имеет решающее значение. - person ToneLoc; 28.01.2011