2011-06-09 4 views
0

Supposons que j'ai un XMLDans AS3, comment la valeur du nœud XML est-elle utilisée comme un autre nœud?

<xml> 

<lang>en</lang> 
<en> 
    <text id="123">One Two Three</text> 
    <text id="hello">Hello</text> 
</en> 

</xml> 

le "en" tag est que si la valeur lang est "en". Si la valeur de lang est "de"

<lang>de</lang> 
<de> 
     <text id="123">One Two Three</text> 
     <text id="hello">Hello</text> 
</de> 

Comment puis-je obtenir ce nom dinamicaly dans mon code actionscript 3.

Supposons que je veux utiliser

var xmlVal = new XML(... the above xml) 
var lang = xmlVal.lang; 

Je ne peux pas utiliser si (xmlVal.lang == "en") .. parce que la valeur lang peut être une chaîne. mais il devrait y avoir un noeud enfant dans ce nom .. !!

Comment puis-je obtenir des valeurs à partir du nœud "en ou de ou what ever .." ??

+0

Je Je ne sais pas si cela fonctionne mais, avez-vous essayé: 'lang langXml: * = xmlVal [xmlVa l.lang]; '? – Kevin

Répondre

2

ai pas testé, mais cela devrait vous donner l'idée générale (que vous pouvez sélectionner à l'aide de façon dynamique la « clé »):

var xmlVal:XML = new XML(... the above xml); 

var type:String = xmlVal.lang; 

var result:XML = xmlVal[type]; 
+0

alors que c'est un peu plus spécifique, vous pouvez également vérifier si '(xmlVal.en! = Undefined)' – divillysausages

+0

1. Saisissez vos variables. 2. N'utilisez pas de constructeurs sur les classes de niveau supérieur (sauf pour les vecteurs et les tableaux ayant une longueur définie). – cwallenpoole

+0

@cwallenpoole: Que voulez-vous dire par # 2? Parlez-vous de 'new XML (...'? – Ocelot20

0

Essayez d'utiliser:

var lang:String = xmlVal.lang; 
var strings:XMLList = xmlVal.elements(lang).text; 
0

C'est l'un des moyens les plus extensibles et cohérents de le faire.

var xmlVal:XML = XML(/*above*/); 
// xmlVal.child("lang"); is a long-hand for xmlVal.lang, but more explicit 
// it can also save you headache later in some corner cases. 
var langs:XMLList = xmlVal.child("lang"); 
// if there is only one lang child, this will grab its' child text 
// use toString to make sure you only grab the string pieces. 
var langVal:String = langs[0].text().toString().replace(/\s/g, ""); 
var langValue:XMLList = xmlVal.child(langVal); 

Vous êtes mieux, cependant, si vous pouvez le changer à partir de:

... 
<lang>en</lang> 
<en> 

à

... 
<lang abbreviation="en"><text id="123">One Two Three</text> 
    <text id="hello">Hello</text></lang> 

Ensuite, vous pouvez appeler:

var xmlVal:XML = XML(/*above*/); 
var finalList:XMLList = xmlVal.child("lang").(@abbreviation == "en"); 
Questions connexes