4

我有以下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: Error #1089: Assignment to lists with more item is not supported ”。

4

2 回答 2

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

我希望这可以帮助你。小心

-奥赞

于 2014-03-07T17:26:33.827 回答
0

正如错误所说,它不受支持。由于您无法对多个元素执行此分配,因此我看不到在不迭代 xml 的情况下执行此操作的方法。

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

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

var xmlist:XMLList = xml.children();
xmlist.attributes().@newAttrib = "1";
于 2013-02-24T18:01:43.827 回答