如何在动作脚本中操作xml中的元素?

时间:2011-03-17 18:14:16

标签: xml flex actionscript-3

我可以使用flex,actionscript中的内置函数来查找xml变量中具有特定名称的节点以及哪些函数可以帮助我操作它?像SQL中的Xquery!每次我想操纵一个xml变量时,我都不想使用for循环。例如,如果我想在此xml中“剪切”节点并为其添加另一个名为enabled的语言。或者如何找到“查找下一个”节点并将其删除?

                 <menuitem label="Edit">
                    <m label="Cut"/>
                    <m label="Copy"/>
                    <m label="Paste"/>
                    <m type="separator"/>
                    <m label="Find"/>
                    <m label="Find Next"/>
                </menuitem>

谢谢你们。

2 个答案:

答案 0 :(得分:1)

Actionscript支持e4x。另请阅读XML class

答案 1 :(得分:0)

1)找到“剪切”节点:

有一种简单的方法可以找到“剪切”节点,但它需要您删除<m type="separator" />,因为它会在此代码中引发错误。简单地找到它:

var cut:XMLList = xml.m.(@label == "Cut");

如果你无法删除“seperator”节点,那么你必须循环才能找到它。

一旦你拥有它,然后添加一个新属性,它只是:

cut.@someOther = true; // adds the attribute "someOther"

2)删除“查找下一个”节点

删除as3中的XML节点有点尴尬。你可以尝试多种方式,但你总会得到一个或另一个错误。有关详细信息,请参阅http://bottomupflash.wordpress.com/2008/03/26/deleting-xml-nodes-harder-than-it-looks/

我可以提出的唯一一段删除“查找下一个”节点的代码是:

var i:int = 0;
for each( var x:XML in xml.m )
{
    if ( x.@label == "Find Next" )
        delete xml.m[i];
    i++;
}

基本上,我们循环遍历结构,找到“Find Next”节点的索引,然后我们使用子选择器删除它。