我需要對一個大的XML文件進行排序,我一直在閱讀將每個元素放入數組中的方法,這是使用Array的sortOn()方法對數據進行排序的方法。ActionScript - 使用Array.sortOn()排序XML文件?
我很在意速度。也許將它們存儲到Vector中。 < XML>而不是Array會提供稍微提高的速度,但這種方法是排序XML數據的最佳方法嗎?
我需要對一個大的XML文件進行排序,我一直在閱讀將每個元素放入數組中的方法,這是使用Array的sortOn()方法對數據進行排序的方法。ActionScript - 使用Array.sortOn()排序XML文件?
我很在意速度。也許將它們存儲到Vector中。 < XML>而不是Array會提供稍微提高的速度,但這種方法是排序XML數據的最佳方法嗎?
其實,我看到兩個解決方案:
1 /你加載一個靜態的XML文件,因此您可以手動進行排序。
2您可以加載動態xml並獲得速度,服務器端可以提供排序功能(易於使用PHP)。 我認爲這是更好的事情。
因此,在這兩種情況下,您必須解析xml一次,存儲數據(Vector,Value Object)並通過銷燬對xml的引用來清除內存。
如果你想對Flash進行排序,你必須創建自己的函數,並使用sortOn方法似乎是不可避免的。
所以,爲了回答我自己的問題,我相信用XML創建一個DataProvider對象是最好的解決方案。
將XML分配給DataProvider不需要設置並遍歷循環,儘管可能會在後臺發生內部循環。我想知道它是否有效,所以如果你知道的話請留下評論。
另外,DataProvider的對象還支持排序,爲創建列表,數據網格的檢索和靈活性等
我相信這個解決方案是理想的AIR應用程序,而kero_zen的解決方案最適合瀏覽器駐留.swf – TheDarkIn1978 2010-11-11 06:07:45
@ 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;
啊,所以它確實使用循環。我想我並不感到驚訝,除此之外怎麼辦呢。感謝這一點。 – TheDarkIn1978 2010-11-11 06:01:59
在服務器上進行PHP排序可能是最好的想法,但在我的情況下,我不擁有或維護XML數據,因此也許只是在ActionScript中對它進行排序將是更易於維護和更快速(或同樣快),而不是在將其發送到Flash之前在我自己的webserve上進行過濾。 – TheDarkIn1978 2010-11-10 17:37:48
而對於殺死XML,你可以使用:http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/system/System.html#disposeXML():) – OXMO456 2010-11-11 00:47:28
我想我的最後評論沒有什麼意義,因爲我忘記提到我在構建AIR應用程序,而不是瀏覽器常駐.swf。所以我想對於AIR應用程序我的解決方案將是理想的,但對於Flash網站,您的解決方案將是最好的。 – TheDarkIn1978 2010-11-11 06:00:25