Flash AS3: используя «строку», чтобы пройти в запрос E4X XML
-
05-10-2019 - |
Вопрос
Я хочу иметь возможность сделать что-то вроде
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]
.
Не связан с StackOverflow