我有这个XML:
var myNode:XML = <node attribute="123"/>
我知道如何向节点添加属性:
myNode.@otherAttribute = "abc";
但是这会将属性添加到最后。如果我想将它添加为第一个属性怎么办? 我想:
<node otherAttribute="abc" attribute="123"/>
我知道可以使用insertChildAfter()
或insertChildBefore()
将子节点添加到特定位置,但我不知道属性是否可能。
答案 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"/>