Flash AS3:使用“string”传入E4X XML查询

时间:2010-09-24 05:11:23

标签: xml flash actionscript-3 e4x xmllist

我希望能够做一些像

这样的事情
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查询的能力。有没有办法做到这一点。只是提示是超级的,如果我有点开始的话,我可以做到。

谢谢!


我想我在这个链接的帮助下找到了一个解决方案:

  

Updating an actionscript xml object directly in one line using 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);

1 个答案:

答案 0 :(得分:3)

我懒得编码和测试它,但是这里的想法是:

  • 打破对"a1.a2.a3".split(".")
  • 部分的查询
  • 继续部分,调用xml.elements(parts[i])(你需要额外的(可能是嵌套的)函数进行递归调用)
  • 如果您获得非空XMLList,请使用下一部分重复调用该列表中的elements
  • 在最后一部分,使用children()[0]
  • 中提取文本