【发布时间】:2010-11-10 14:06:24
【问题描述】:
我需要对一个大型 XML 文件进行排序,并且我一直在阅读将每个元素放入数组中是使用 Array 的 sortOn() 方法对数据进行排序的方法。
我担心速度。也许将它们存储到 Vector。 而不是 Array 会稍微提高速度,或者不会,但是这种方法是对 XML 数据进行排序的最佳方法吗?
【问题讨论】:
标签: xml arrays actionscript-3 sorting e4x
我需要对一个大型 XML 文件进行排序,并且我一直在阅读将每个元素放入数组中是使用 Array 的 sortOn() 方法对数据进行排序的方法。
我担心速度。也许将它们存储到 Vector。 而不是 Array 会稍微提高速度,或者不会,但是这种方法是对 XML 数据进行排序的最佳方法吗?
【问题讨论】:
标签: xml arrays actionscript-3 sorting e4x
实际上,我看到了两种解决方案:
1/ 您加载了一个静态 xml 文件,因此您可以手动进行排序。
2/ 您加载一个动态 xml 并为了提高速度,服务器端可以提供排序(在 PHP 中很容易)。 我认为这是更好的做法。
所以在这两种情况下,您必须解析一次 xml,存储数据(向量、值对象)并通过销毁对 xml 的引用来清除内存。
如果你想在 Flash 端进行排序,你必须创建自己的函数,并且使用方法 sortOn 似乎是不可避免的。
【讨论】:
@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;
【讨论】:
所以,回答我自己的问题,我相信用 XML 创建一个 DataProvider 对象是最好的解决方案。
将 XML 分配给 DataProvider 不需要设置并通过循环进行迭代,尽管可能会在幕后发生内部循环。我很想知道它是否有,所以如果你知道,请发表评论。
此外,DataProvider 对象还支持排序、检索和灵活地创建列表、数据网格等。
【讨论】: