Динамический тип Flex XML - PullRequest
       19

Динамический тип Flex XML

1 голос
/ 02 февраля 2010

У меня есть приложение, которое получает динамические данные XML с сервера. Структура XML является динамической, и имена тегов / атрибутов не могут быть предсказаны. НИКАКИЕ строки не могут быть жестко закодированы. Данные возвращаются из базы данных (представьте столбцы и строки), а тип данных известен на стороне сервера. Ниже приведен только пример, только показывает структуру того, как данные возвращаются.

<dataset>
    <row>
        <firstName value="Chris" type="String"/>
        <lastName value="McDonald" type="String"/>
        <age value="24" type="Integer"/>
    </row>
    <row>
        <firstName value="Bob" type="String"/>
        <lastName value="Bourne" type="String"/>
        <age value="43" type="Integer"/>
    </row>
</dataset>

Мне интересно, как / если я могу получить эти данные в типизированные значения в наборе массивов, например:

public var arr:ArrayCollection = new ArrayCollection(
    [firstName:"Chris", lastName:"McDonald", age:24], ...); // Note that age is an integer, not a string

Заранее спасибо

1 Ответ

2 голосов
/ 02 февраля 2010

Да, я думаю, вы можете сделать это.Посмотрите, поможет ли это:

 public function parseXML(datasetXML:String):ArrayCollection {
  var a:Array = new Array();
  var xml:XML = new XML(datasetXML);
  xml.ignoreWhitespace = true;
  var rows:XMLList = xml.row;
  for each (var row in rows) {
    a.push(getObject(row));
  }
}
public function getObject(xml:XML):Object {
  var obj:Object = new Object();
  for each (var column in xml.elements()) {
    if (column.@type == "String") {
      obj[column.localName()] = column.@value;
    }else if(column.@type = "Integer") {
      obj[column.localName()] = int(column.@value);
    }
  }
  return obj;
}
...