2010-11-10 87 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