闪存AS3:使用"串"通过在E4X XML查询闪存、QUOT、E4X、XML

2023-09-08 13:00:55 作者:柠蓝浅夏

我希望能够像做

  VAR XMLQUERY:字符串=a1.a2.a3;
VAR parserVal:XML = parserMethod(XMLQUERY);
// 要么
VAR parserVal:返回XMLList = parserMethod(XMLQUERY);`
 

,并得到一个输出类似于

 < A3>有的值小于/ A3>
 

重要提示:,然后我希望能够更换输出 a1.a2.a3 因此,使用的后裔是毫无疑问的。 :(

所以它基本上是调用XML查询字符串的能力。有没有办法做到这一点。只是一个提示是超级的,我可以做到这一点,如果我有一点点头开始。

联想笔记本B450怎样重装系统

感谢您!

我想我找到与此链接帮助的解决方案:

  

Updating直接在一行中使用ActionScript XML对象中E4X?

 公共静态函数如updateXML(XML:XML,路径:字符串,数据:返回XMLList = NULL,更新:布尔=假,XmlListOnly:布尔=假):* {
            变种nodesArray:数组= path.split(。);
            VAR tempXML:XML = XML;
            VAR tempXMLCandidate:XML;
            VAR标签名:字符串;
            对于(VAR我:= 0; I< nodesArray.length;我++){
                标签名= nodesArray [I]
                如果(ⅰ== nodesArray.length  -  1){
                    如果(数据= NULL和放大器;!&安培;更新和放大器;&安培;!XmlListOnly){
                    tempXML [标签名] =数据;
                    }否则,如果(XmlListOnly){
                        返回tempXML [标签名]。
                    }其他{
                    返回tempXML [标签名] .length();
                    }
                }其他{
                    tempXMLCandidate = tempXML [标签名] [0];
                    如果(!tempXMLCandidate){
                        tempXML.appendChild(tempXMLCandidate);
                    }
                tempXML = tempXMLCandidate;
                }
            }
            返回tempXML;
        }
 

您可以调用它是这样的:

 如updateXML(xmlHold,words.exercise,sortedXmlList,真正的);
 

解决方案

我懒得code和测试,但这里的想法:

将您的查询部分a1.a2.a3.split(。) 走在零部件,称 xml.elements(件[I])(你需要额外的(可能嵌套)函数的递归调用) 如果你得到非空的XMLList,重复调用元素使用下一部分名单上。 在最后一部分,从中提取文本儿童()[0]

I want to be able to do something like

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

and get an output something like

<a3>Some value</a3>

Important: And I want to be able to replace the output at a1.a2.a3 so using descendants is out of question. :(

So it's basically the ability to call xml query in string. Is there a way to do this. Just a hint would be super, I can do it if I got a bit of head-start.

Thank you!

I think I found a solution with the help from this link:

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;
        }

You can call it like this:

updateXml(xmlHold, "words.exercise", sortedXmlList, true);

解决方案

I'm too lazy to code and test it, but here's idea:

Break your query on parts "a1.a2.a3".split(".") Go on the parts, calling xml.elements(parts[i]) (you'll need extra (maybe nested) function for recursive calls) If you get non-empty XMLList, repeat calling elements on that list using next part. On last part, extract text from it with children()[0].