0

我有这个 XML:

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

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

myNode.@otherAttribute = "abc";

但这会将属性添加到末尾。如果我想将它添加为第一个属性怎么办?我想拥有 :

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

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

4

2 回答 2

3

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

请注意,开始标签或空元素标签中属性规范的顺序并不重要。

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

但是,如果我不得不猜测解决方法,我会说删除所有属性然后按照您想要的顺序读取它们可能会起作用。但是话又说回来,它们也可能按字母顺序发出,甚至是其他一些看似任意的顺序;它的行为充其量是不确定的,并且可能在 API 的未来实现中发生变化。

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

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

另请参阅此问题以获取类似的参考点。

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

于 2012-05-02T11:32:07.490 回答
0

我们有同样的问题。关键是使用 XML,而不是 XMLNodes,并使用 xml.@attributeName 添加所有属性。(我已经剪掉并重写了代码,所以我可以在这里发布它,但原件肯定可以工作)

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"/>
于 2012-09-10T11:38:06.070 回答