将属性添加到AS3中特定位置的XML节点

时间:2012-05-02 10:19:28

标签: xml actionscript-3 actionscript

我有这个XML:

var myNode:XML = <node attribute="123"/>

我知道如何向节点添加属性:

myNode.@otherAttribute = "abc";

但是这会将属性添加到最后。如果我想将它添加为第一个属性怎么办? 我想:

<node otherAttribute="abc" attribute="123"/>

我知道可以使用insertChildAfter()insertChildBefore()将子节点添加到特定位置,但我不知道属性是否可能。

2 个答案:

答案 0 :(得分:3)

如果订单很重要,那么您应该使用元素而不是属性。 XML建议说属性顺序“不重要”(参见section 3.1)。

  

请注意,start-tag或empty-element标记中的属性规范顺序并不重要。

另一方面,元素 do 在其父级中具有指定的序号位置。

但如果我不得不猜测一下,我会说删除所有属性,然后按照你希望可能工作的顺序读取它们。但是,它们也可能以字母顺序发出,或者甚至是其他看似任意顺序;它的行为充其量只是非确定性的,并且可能在API的未来实现中发生变化。

即使可以在ActionScript中执行此操作,通过任何其他XML工具(如XSLT)运行它,也无法保证他们将遵循属性顺序。

正确的答案是“不要这样做。”

另请参阅this question以获得类似的参考点。

要从这个答案中借鉴,如果您正在处理属性顺序 相关的文档,那么您不使用XML - 只是表面上看起来像XML的东西。因此,您可能使用基于XML的工具/库来处理或生成该文档。

答案 1 :(得分:0)

我们遇到了同样的问题。关键是使用XML而不是XMLNodes,并使用xml。@ attributeName添加 ALL 属性。 (我已经删除并重写了代码,所以我可以在这里发布,但原文是肯定的)

var xml : XML = <Control/>;

xml.@name = pButton.aGetSkinName();
xml.@x = pButton.aGetSkinPosition().x;
xml.@y = pButton.aGetSkinPosition().y;          
xml.@text = pButton.textField ? pButton.textField.text : "";
[...]
xml.@enabled = pButton.enabled;
trace(xml)

这跟踪:

<Control name="fullscreenButtonSkin" x="428" y="12" text="" [...] enabled="true"/>