Flash AS3: Uso di “stringa” di passare in E4X di query XML
-
05-10-2019 - |
Domanda
Voglio essere in grado di fare qualcosa di simile
var XMLquery:String = "a1.a2.a3";
var parserVal:XML = parserMethod(XMLquery);
// or
var parserVal:XMLList = parserMethod(XMLquery);`
e ottenere un qualcosa di output come
<a3>Some value</a3>
Importante: e io voglio essere in grado di sostituire l'uscita a a1.a2.a3 in modo da utilizzare discendenti è fuori discussione. : (
Quindi è fondamentalmente la capacità di interrogazione chiamata xml nella stringa. C'è un modo per fare questo. Solo un suggerimento sarebbe super, posso farlo se ho un po 'di vantaggio temporale.
Grazie!
Credo di avere trovato una soluzione con l'aiuto da questo link:
Aggiornamento di ActionScript xml oggetto direttamente in una linea usando 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;
}
È possibile chiamare in questo modo:
updateXml(xmlHold, "words.exercise", sortedXmlList, true);
Soluzione
Sono troppo pigro per codice e testarlo, ma di qui idea:
- Rompere la query su parti
"a1.a2.a3".split(".")
- Vai sulle parti, chiamando
xml.elements(parts[i])
(avrete bisogno di più (funzione forse annidata) per le chiamate ricorsive) - Se si ottiene XMLList non vuoto, ripetere chiamando
elements
in tale elenco utilizzando parte successiva. - Nella parte finale, il testo estratto da esso con
children()[0]
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow