2010-02-02 4 views
1

J'ai une application qui reçoit des données XML dynamiques d'un serveur. La structure du XML est dynamique et les noms de balises/attributs ne peuvent pas être prédits. AUCUN article de rangée ne peut être codé en dur. Les données reviennent d'une base de données (imaginez des colonnes et des lignes) et le type des données est connu côté serveur. Ce qui suit est juste un exemple, un montre seulement la structure de la façon dont les données reviennent.Flex XML type dynamique

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

Je me demande comment/si je peux obtenir ces données en valeurs saisies dans un ArrayCollection comme ceci:

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

Merci à l'avance

Répondre

2

Oui, je pense que vous pouvez le faire. Voyez si cela aide:

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