【问题标题】:How to add Attribute to XMLLIST without looping in E4X如何在不循环 E4X 的情况下将属性添加到 XMLLIST
【发布时间】:2013-02-09 14:30:03
【问题描述】:

我有以下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:不支持分配给包含多个项目的列表。”

【问题讨论】:

  • 您想克服什么问题?是表达的速度还是简洁?
  • 我正在寻找简洁和速度,为什么我需要遍历所有节点来添加属性?如果我可以在一行代码中实现同样的功能会更方便。
  • 如果你想在 1 LOC 中完成,为什么不把它包装在一个函数调用中?
  • 是的,我可以这样做,但我的要求是我必须在不使用任何循环语句的情况下完成它,我需要 e4x 中的任何预定义语法来为 [0] 中的 xmllist 中的所有 xml 项目添加一个属性]..[n].
  • 实际上在纯 XML 环境中唯一的方法是通过 XSLT ;-) 我猜你会更喜欢你现在正在做的方式

标签: xml actionscript-3 actionscript flex4 xmllist


【解决方案1】:

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

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

这只是一个更简洁的版本:

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

【讨论】:

  • 嗨 sunil 我也尝试过同样的方法,但没有用,感谢您的尝试....我们可以通过 e4x 中的任何其他方式实现吗?
【解决方案2】:

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

TypeError: Error #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";

我希望这对你有帮助。保重

-奥赞

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2017-05-01
    • 2015-03-23
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多