フラッシュ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クエリを呼び出す機能です。これを行う方法はありますか。ちょうどヒントが超えるでしょう、私が少しヘッドスタートを得たならば、私はそれをすることができます。
ありがとうございました!
このリンクの助けを借りて解決策を見つけたと思います。
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