如何在不使用E4X循环的情况下将属性添加到XMLLIST

时间:2013-02-24 08:56:08

标签: xml actionscript-3 actionscript flex4 xmllist

我有以下xml

var xml:XML = <test>
    <node id='1'/>
    <node id='2'/>
    <node id='3'/>
    <node id='4'/>
    <node id='5'/>
</test>;

var xmlist:XMLList = xml.children();

for each (var node:XML in xmlist) 
{
    node.@newAttribute = "1";
}

我循环遍历每个节点并添加属性。如何在不循环的情况下执行此操作?我试过这个

xmlist.attributes().@newAttrib = "1";

但我收到错误“ TypeError:错误#1089:不支持分配多个项目的列表。”

2 个答案:

答案 0 :(得分:1)

自从提出这个问题已经过去2周了,但总会有更多的人需要帮助。

TypeError:错误#1089是由xml中多个对象的结果引起的。

通常我通过类似此操作= xml.classes。(@ id == 1).students。(@ no == 2)。@ Grade =“A”; 由于xml.classes中有多个学生而导致错误,因此它尝试返回所有这些错误。正如错误所示:“不支持分配具有多个项目的列表。”您不能同时为多个对象分配值。

由于您将所有s添加到XMLList中,我不确定原因,因为我不使用XMLList。我认为这是无用的。因此,如果您将代码更改为

var xml:XML = <test>
    <node id='1'/>
    <node id='2'/>
    <node id='3'/>
    <node id='4'/>
    <node id='5'/>
</test>;


for each (var n:XML in xml) 
{
    n.@newAttribute = "1";
}

问题应该解决。 但我建议你使用“id”作为唯一键。然后,您可以使用该唯一键来访问XML中的特定项目,例如

xml.node.(@id=="1").@newAttribute="1";

我希望这会对你有所帮助。小心

-Ozan

答案 1 :(得分:0)

正如错误所述,它不受支持。既然你不能对多个元素进行这个赋值,那么我没有办法在不迭代xml的情况下做到这一点。

为了好玩,我尝试了这个并得到了同样的错误:xml.node.@newAttribute=1

这只是一个稍微简洁的版本:

var xmlist:XMLList = xml.children();
xmlist.attributes().@newAttrib = "1";