Flash AS3: Utilisation de « chaîne » pour passer dans la requête XML E4X
-
05-10-2019 - |
Question
Je veux être capable de faire quelque chose comme
var XMLquery:String = "a1.a2.a3";
var parserVal:XML = parserMethod(XMLquery);
// or
var parserVal:XMLList = parserMethod(XMLquery);`
et obtenir un quelque chose comme de sortie
<a3>Some value</a3>
Important: Et je veux être en mesure de remplacer la sortie à a1.a2.a3 pour l'aide descendants est hors de question. : (
Il est donc essentiellement la possibilité d'appeler requête xml dans la chaîne. Y a-t-il un moyen de faire cela. Juste un soupçon serait super, je peux le faire si je suis un peu la tête de démarrage.
Merci!
Je pense avoir trouvé une solution à l'aide de ce lien:
Mettre à jour une actionscript objet XML directement dans une ligne à l'aide e4x?
public static function updateXml(xml:XML, path:String, data:XMLList = null,update:Boolean = false,XmlListOnly:Boolean = false):* {
var nodesArray:Array = path.split(".");
var tempXML:XML = xml;
var tempXMLCandidate:XML;
var tagName:String;
for (var i:int = 0; i < nodesArray.length; i++){
tagName = nodesArray[i];
if (i == nodesArray.length - 1){
if (data != null && update && !XmlListOnly){
tempXML[tagName] = data;
}else if (XmlListOnly){
return tempXML[tagName];
}else{
return tempXML[tagName].length();
}
}else{
tempXMLCandidate = tempXML[tagName][0];
if (!tempXMLCandidate){
tempXML.appendChild(tempXMLCandidate);
}
tempXML = tempXMLCandidate;
}
}
return tempXML;
}
Vous pouvez l'appeler comme ceci:
updateXml(xmlHold, "words.exercise", sortedXmlList, true);
La solution
Je suis trop paresseux pour coder et tester, mais l'idée ici:
- cassez votre requête sur les pièces
"a1.a2.a3".split(".")
- Allez sur les parties, appelant
xml.elements(parts[i])
(vous aurez besoin fonction supplémentaire (peut-être imbriquée) pour les appels récursifs) - Si vous obtenez XMLList non vide, répétez l'appel
elements
sur cette liste en utilisant une partie suivante. - En dernière partie, le texte extrait avec
children()[0]
.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow