2010-02-02 4 views
1

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

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

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

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

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

ответ

2

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

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 ([email protected] == "String") { 
     obj[column.localName()] = [email protected]; 
    }else if([email protected] = "Integer") { 
     obj[column.localName()] = int([email protected]); 
    } 
    } 
    return obj; 
}