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を参照)。

start-tag または empty-element タグ内の属性指定の順序は重要ではないことに注意してください。

一方、要素には親内で指定された序数の位置があります。

しかし、回避策を推測する必要がある場合は、すべての属性を削除してから、必要な順序で再読み込みするとうまくいくかもしれません。しかし、これらはアルファベット順で出力される場合もあれば、一見任意の順序で出力される場合もあります。その動作はせいぜい非決定論的であり、API の将来の実装で変更される可能性があります。

XSLT などの他の XML ツールを介して ActionScript で実行できたとしても、それらが属性の順序を尊重するという保証はありません。

正解は「やらない」です。

同様の参照点については、この質問も参照してください。

その答えから借りるために、属性の順序関連するドキュメントを扱っている場合、XML を使用していません。表面的には XML のように見えるものです。したがって、 XML ベースのツールやライブラリを使用してそのドキュメントを処理または生成するべきではありません。

于 2012-05-02T11:32:07.490 に答える
0

同じ問題がありました。重要なのは、XMLNodes ではなく XML を使用し、すべての属性を 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 に答える