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);
¿Fue útil?

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
scroll top