0

だから私は少しトリッキーな問題を抱えています...

作成中のクラス内で XML ファイルを生成しています。これが最初の XML だったとしましょう:

<base>
    <container id="0">
        <element type="Image" x="0" y"0" />
        <element type="Image" x="100" y"0" />
    <container/>
</base>

を追加したい<element>。ソートの最初の順序は、「タイプ」、次に「x」、次に「y」です。したがって、新しい「タイプ」を追加する場合、<element>たとえばタイプ「テキスト」を追加すると、「イメージ」<element>の後にテキストを挿入する必要があります。

例えば:

<base>
    <container id="0">
        <element type="Image" x="0" y"0" />
        <element type="Image" x="100" y"0" />
        <element type="Text" x="200" y"100" />
    <container/>
</base>

基本的な考え方は、それぞれに<element>'s を追加するたびにリストをソートしたままにすること<container>です...数値によるソートは簡単ですが、アルファベット順にソートするきれいな方法がわかりません。

提案を歓迎します。

私が考えることができる唯一のことは、型を配列に入れることです。「新しいタイプ」を追加し、並べ替えて indexOf() を呼び出します...番号は、前に挿入する必要がある現在の位置にする必要がありますか? 下品な感じ。

4

3 に答える 3

0

既存のすべての XML 要素を配列に読み取り、新しい要素を追加し、配列を並べ替えてから、すべての要素を書き戻すことをお勧めします。これは、各新しい要素を挿入する必要があるインデックスを見つけようとするよりも簡単かもしれません。ただし、状況によっては、これはあまり効率的ではない場合があります。

並べ替えを行うには、次のようなことを試します(テストされていません):

array.sort(function (a:XML, b:XML) {
    if (a.@type < b.@type) return -1;
    if (a.@type > b.@type) return +1;
    if (Number(a.@x) != Number(b.@x)) return Number(a.@x) - Number(b.@x);
    return Number(a.@y) - Number(b.@y);
});

編集:ソート比較関数にキャストを追加しました。

于 2010-01-10T06:14:32.433 に答える
0

XML 構造を変更できますか? ノード内のすべてのイメージ要素、<images>ノード内のテキスト要素などをラップすることができます<texts>。このようにして、要素を適切な場所に簡単に追加できます。

<element>にアクセスすることで、すべてのノードを取得できますbase.container.*.element

于 2010-09-11T07:24:30.993 に答える