2009-12-04 7 views
3

J'ai du mal à analyser un fichier XML en utilisant e4X. Je peux obtenir des informations à partir de la balise "version", mais je ne peux pas les balises imbriquées.Problème d'analyse XML avec e4X et Flex 3

Quelqu'un pourrait-il signaler ce que je fais de mal?

Voici le XML:

<NameOfRoot xmlns="http://www.theaddress.com/file"> 
    <version>1.0</version> 
    <NameOfChild1> 
     <NameOfChild2> 
      <GeneralData> 
       <Identifier>2678</Identifier> 
      </GeneralData> 
     </NameOfChild2> 
    </NameOfChild1> 
</NameOfRoot> 

Voici le code:

<mx:HTTPService id="MyService" url="data.xml" result="resultHandler(event)" resultFormat="e4x"/> 

private function resultHandler(event:ResultEvent):void { 

    XMLData = event.result as XML; 

    var ver:String = XMLData.*::version; // ver = 1.0 
    var id:String = XMLData.*::NameOfChild1.NameofChild2.GeneralData.Identifier; //empty string 
} 

Répondre

11

Chaque élément est un espace de noms dans votre espace de noms par défaut, vous devez donc se qualifier chaque niveau:

var id:String = XMLData.*::NameOfChild1.*::NameOfChild2.*::GeneralData.*::Identifier; 
// or 
var n:Namespace = XMLData.namespace(); 
var id:String = XMLData.n::NameOfChild.n::NameOfChild2.n::GeneralData.n::Identifier; 

Vous pouvez définir un espace de noms par défaut avec une directive "default namespace xml":

default xml namespace = new Namespace("http://www.theaddress.com/file"); 
var id:String = xml.NameOfChild1.NameOfChild2.GeneralData.Identifier; 
+0

Que faire si le nom de l'enfant est un mot réservé, par ex. const? – Strudel

+0

Vous pouvez utiliser la forme la plus longue: parent.child ("const"). Voir la documentation de l'objet XML actionscript: http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/XML.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2 –