Flash AS3: используя «строку», чтобы пройти в запрос E4X XML

StackOverflow https://stackoverflow.com/questions/3784354

Вопрос

Я хочу иметь возможность сделать что-то вроде

var XMLquery:String = "a1.a2.a3";
var parserVal:XML = parserMethod(XMLquery);
// or
var parserVal:XMLList = parserMethod(XMLquery);`

и получить выходное что-то вроде

<a3>Some value</a3>

Важный: И я хочу иметь возможность заменить вывод на A1.A2.A3. Итак, использование потомки не имеет вопроса. :(

Так что в основном способность вызывать запрос XML в строке. Есть ли способ сделать это. Просто намек будет супер, я могу сделать это, если я получил немного головы.

Спасибо!


Я думаю, что нашел решение с помощью этой ссылки:

Обновление объекта ActionScript XML напрямую в одной строке с использованием 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;
        }

Вы можете назвать это так:

updateXml(xmlHold, "words.exercise", sortedXmlList, true);
Это было полезно?

Решение

Я ленивый код и проверить его, но вот идею:

  • Разбить ваш запрос на детали "a1.a2.a3".split(".")
  • Перейти на части, звонив xml.elements(parts[i]) (Вам понадобится дополнительная (возможно, вложенная) функция для рекурсивных вызовов)
  • Если вы получите непустой XMllist, повторите вызов elements в этом списке с использованием следующей части.
  • На последнюю часть, извлечь текст из него с children()[0].
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top