2009-08-13 12 views
0

Flex Webアプリケーションでは、子要素の属性に基づいて、XML要素の子に簡単にソートを適用できますか?以下の例は、以下:XMLListCollectionサブ要素のフレックスソート

にXMLListCollection:

<a anotherProp="ABCDE">
    <e prop="AB">1</element>
    <e prop="BC">2</element>
</a>
<a anotherProp="FGEH">
    <e prop="HF">3</element>
    <e prop="AD">4</element>
    <e prop="AC">5</element>
</a>

私は彼らの "小道具" 属性に応じて、個別に各<a>要素内に、<e>の要素をソートしたいと思います。私は彼らの定義された順序のままに<a>年代をしたいと思いますが、その<e>子供がに基づいてソートされるように終わり

for each(var node:XML in initialInput:XMLListCollection){ 
    if(node.localName()=="a"){ 
    //I was hoping to be able to sort the <e> children of the node variable here 
    xmlListCollectionVar.addItem(node); 
    } 
} 

<a>要素を含む配列を生成するための私のコードの線に沿っています"prop"属性。これまでのところ私がしようとした場合:

node.childrenを()ソート= someSortVar

someSortVarは、そのフィールドがに設定された場所:

のSortFields( "eは@小道具"、 ...)

null値については例外が発生します。子リストをXMLListCollectionに変換し、それをソートしてノード変数に戻す方法はありますか?すべての返信いただきありがとうございます。

+0

Adob​​e Flexフォーラムでコードを検索して解決しました。 – raptors

答えて

0

私は2つのソリューションを思い付いた:関与する最初のアレイにXMLListを変換し、アレイ上に並べ替え:

for each (var a:XML in elt..a) 
    { 
    var children:Array = toArray(a.children()); 
    children.sortOn("@prop"); 
    a.setChildren(new XMLList()); 
    for each (var c:XML in children) 
    { 
     a.appendChild(c); 
    } 
    } 

XMLListCollectionのソート属性を使用して関与する第二、ものの

var sort:Sort = new Sort() 
    sort.fields = [new SortField("@prop")]; 
    for each (var a:XML in xml..a) 
    { 
    var xcoll:XMLListCollection = new XMLListCollection(a.children()); 
    xcoll.sort = sort; 
    xcoll.refresh(); 
    a.setChildren(xcoll.copy()); 
    } 
:私は< >子供が XMLList、ない XMLListCollectionあると信じています210
+0

ありがとうございます。アドビフォーラムのリンクには、これらの行に沿ったソリューションも含まれていますが、オーバーヘッドをヘルパー関数やその他の点で見ればわかりますので、私はXMLListCollectionに関わるあなたのアプローチについていくつもりです。 – raptors

+1

あなたの投稿を編集できませんが、xcol1.refresh();を忘れました。 XMLListCollectionのアプローチで使用します。将来この問題を遭遇する人には、ちょうどメモ。 – raptors

+0

私はそれを適切な場所に追加したいと思う。 –

1

compareFunctionを使用して配列のsort関数を使用できます。

...引数 - 比較関数と ソート動作を決定する 値を指定する引数。このメソッドは、引数で構文 及び引数の順序 のArray.sort(compareFunctionは、 sortOptions)を使用 定義を次のよう

compareFunctionは - 要素のソート 順序を決定するために使用される比較 機能を配列内にあります。この 引数はオプションです。比較 関数は、 と比較する2つの引数を取る必要があります。要素AとBが与えられた場合、 compareFunctionの結果は、 -1、ソートされたシーケンス0のBの前にAがある場合、AがB 1に等しい場合、 Bソートされた シーケンスsortOptions - 1つまたは複数の 数値または定義された定数 | (bitwise OR) 演算子は、振る舞いをデフォルトから に変更します。この 引数はオプションです。以下 sortOptionsの許容値は次のとおり 1またはArray.CASEINSENSITIVEは2又は 4をArray.DESCENDINGまたはArray.UNIQUESORTは 8またはArray.RETURNINDEXEDARRAYは16または Array.NUMERIC詳細については、 は(Array.sortOnを参照します)方法。

+0

申し訳ありません - タイトルとコードを編集しました - 実際には配列ではなくXMLListCollectionを使用しています。私の投稿のXMLの例は、このXMLListCollection( ...)です。 – raptors

0

アドビフォーラムで適切なコードの実装が見つかりました。最初に見つからないのは残念です。

http://forums.adobe.com/message/72521#72521

+0

別のコード実装の別のリンクはhttp://forums.adobe.com/message/1950215#1950215 – raptors

関連する問題