Flash AS3: El uso de “cadena” para pasar en E4X consulta XML
-
05-10-2019 - |
Pregunta
Quiero ser capaz de hacer algo como
var XMLquery:String = "a1.a2.a3";
var parserVal:XML = parserMethod(XMLquery);
// or
var parserVal:XMLList = parserMethod(XMLquery);`
y obtener una salida como algo
<a3>Some value</a3>
Importante: Y yo quiero ser capaz de reemplazar la salida a a1.a2.a3 por lo que usar descendientes está fuera de cuestión. : (
Así que es básicamente la capacidad de consulta de llamadas xml en la cadena. Hay alguna forma de hacer esto. Sólo un consejo sería estupendo, puedo hacerlo si me dieron un poco de ventaja inicial.
Gracias!
Creo que he encontrado una solución con la ayuda de este enlace:
Actualización de un actionscript xml objeto directamente en una línea 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;
}
Se le puede llamar así:
updateXml(xmlHold, "words.exercise", sortedXmlList, true);
Solución
Me da flojera código y probarlo, pero de aquí la idea:
- Romper su consulta en partes
"a1.a2.a3".split(".")
- Ir sobre las partes, llamando
xml.elements(parts[i])
(que necesitará extra (tal vez la función anidada) para las llamadas recursivas) - Si recibe XMLList no vacía, repita llamando
elements
en esa lista usando siguiente parte. - En la última parte, el texto extracto del mismo con
children()[0]
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow