如何在没有任何延迟的情况下遍历庞大的XMLList?

时间:2015-06-04 10:36:06

标签: xml actionscript-3

我有一个xml列表,其中包含大约50000个项目。当我搜索某些内容时,我使用for循环遍历所有元素..它可以工作,但应用程序在4秒钟内无响应。有没有更快的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

如果您只搜索它,那么您应该使用XML搜索方法而不是循环自己。

例如:

var searchResult:XMLList = xmlData.*.(NAME == "search");
searchResult = xmlData.*.(NAME == "search" || NAME == "other");//more example
searchResult = xmlData.*.(NAME == "search" && @type == "attribute");//more example

返回带有NAME标记的所有元素,内容为" search"。你也可以查找属性等等......你可以编写复杂的搜索逻辑并获得没有任何循环的结果。

如果你绝对必须循环,那么你需要将循环分解为步骤。保留迭代器引用并设置最大循环数,例如:

var iterator:int = 0;
var maxLoop:int = 1000;
var timer:Timer = etc ...
timer.start();

现在每个Timer都会勾选你从" iterator"开始循环遍历xml。结束于" maxLoop"然后你增加"迭代器"通过maxLoop并运行第二个计时器滴答等...它不会使整个循环更快但它会阻止应用程序空闲。您甚至可以显示进度条。

编辑:删除XMLList。

如果您需要删除XMLList,则获取其索引并从其父级删除。以上面的示例为例,假设只返回一个元素(如果有多个元素使用循环),则xmlData root是NAME XMLList的父元素:

var elementIndex:int = searchResult.childIndex();
delete xmlData.NAME[elementIndex];