如何在E4X中添加XMLLIST属性而无需循环

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: 错误 #1089:不支持对具有多个项目的列表进行赋值。"


你想要克服的问题是什么?是速度还是表达简洁性? - robkuz
我正在寻找简洁和速度,为什么我需要循环遍历所有节点来添加属性?如果我可以在一行代码中实现相同的功能,那将更加方便。 - Gowtham S
如果您想用一个语句实现它,为什么不将其封装在一个函数调用中? - robkuz
是的,我可以这样做,但我的要求是不使用任何循环语句,我需要在e4x中使用任何预定义的语法为xmllist中的所有xml项添加属性,从[0]..[n]。 - Gowtham S
实际上,在纯 XML 环境中,唯一的方法是通过 XSLT ;-)我猜你现在正在使用的方法更可取。 - robkuz
2个回答

1

这个问题被提出已经两周了,但总会有更多需要帮助的人。

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

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

既然你将所有添加到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


0

如错误所示,它不受支持。由于您无法将此赋值给多个元素,我没有看到在不迭代 XML 的情况下完成此操作的方法。

仅供娱乐,我尝试了这个并得到了相同的错误:xml.node.@newAttribute=1

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

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

嗨,Sunil,我也尝试了同样的方法,但没有用,感谢你的尝试...我们能通过其他方式在E4X中实现吗? - Gowtham S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接