2010-11-10 73 views
0

我需要對一個大的XML文件進行排序,我一直在閱讀將每個元素放入數組中的方法,這是使用Array的sortOn()方法對數據進行排序的方法。ActionScript - 使用Array.sortOn()排序XML文件?

我很在意速度。也許將它們存儲到Vector中。 < XML>而不是Array會提供稍微提高的速度,但這種方法是排序XML數據的最佳方法嗎?

回答

2

其實,我看到兩個解決方案:

1 /你加載一個靜態的XML文件,因此您可以手動進行排序。

2您可以加載動態xml並獲得速度,服務器端可以提供排序功能(易於使用PHP)。 我認爲這是更好的事情。

因此,在這兩種情況下,您必須解析xml一次,存儲數據(Vector,Value Object)並通過銷燬對xml的引用來清除內存。

如果你想對Flash進行排序,你必須創建自己的函數,並使用sortOn方法似乎是不可避免的。

+0

在服務器上進行PHP排序可能是最好的想法,但在我的情況下,我不擁有或維護XML數據,因此也許只是在ActionScript中對它進行排序將是更易於維護和更快速(或同樣快),而不是在將其發送到Flash之前在我自己的webserve上進行過濾。 – TheDarkIn1978 2010-11-10 17:37:48

+1

而對於殺死XML,你可以使用:http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/system/System.html#disposeXML():) – OXMO456 2010-11-11 00:47:28

+0

我想我的最後評論沒有什麼意義,因爲我忘記提到我在構建AIR應用程序,而不是瀏覽器常駐.swf。所以我想對於AIR應用程序我的解決方案將是理想的,但對於Flash網站,您的解決方案將是最好的。 – TheDarkIn1978 2010-11-11 06:00:25

0

所以,爲了回答我自己的問題,我相信用XML創建一個DataProvider對象是最好的解決方案。

將XML分配給DataProvider不需要設置並遍歷循環,儘管可能會在後臺發生內部循環。我想知道它是否有效,所以如果你知道的話請留下評論。

另外,DataProvider的對象還支持排序,爲創建列表,數據網格的檢索和靈活性等

+0

我相信這個解決方案是理想的AIR應用程序,而kero_zen的解決方案最適合瀏覽器駐留.swf – TheDarkIn1978 2010-11-11 06:07:45

1

@ TheDarklnl1978這裏是fl.data.DataProvider數組中的轉換XML源代碼的一部分(在Flash CS5安裝目錄中找到):

var xml:XML = obj as XML; 
retArr = []; 
var nodes:XMLList = xml.*; 
for each (var node:XML in nodes) { 
    var obj:Object = {}; 
    var attrs:XMLList = node.attributes(); 
    for each (var attr:XML in attrs) { 
     obj[attr.localName()] = attr.toString(); 
    } 
    var propNodes:XMLList = node.*; 
for each (var propNode:XML in propNodes) { 
     if (propNode.hasSimpleContent()) { 
      obj[propNode.localName()] = propNode.toString(); 
     } 
    } 
    retArr.push(obj); 
} 
return retArr; 
+0

啊,所以它確實使用循環。我想我並不感到驚訝,除此之外怎麼辦呢。感謝這一點。 – TheDarkIn1978 2010-11-11 06:01:59