我有一个xml文件,如下所示:
<UUT>
<DKBFile>091750</DKBFile>
<part>
<name>FL_U1</name>
<xcoord>439</xcoord>
<ycoord>132</ycoord>
<width>55</width>
<height>24</height>
</part>
</UUT>
可能有几百个“部件”,我正在尝试获取名称/坐标信息。数量和我获取信息的部分会发生变化,但是一旦我试图获取超过100个部分的信息,遍历变得非常缓慢。这是我的代码:
$.ajax({
url: "PROFILER_ShopAid/shopaid.xml",
dataType: ($.browser.msie) ? "xml" : "text/xml",
success: function(data){
var i = 1; //array traversal
var xcoord = 0;
var ycoord = 0;
var width = 0;
var height = 0;
var part = "";
var nameFound = "";
//Get Part Count
var covCnt = DKB.GetClearedPartCnt(); //Gets number of parts
//Get Part Info
while (covCnt >= i)
{
part = DKB.GetClearedPart(i); //Returns name of part
$(data).find("part").each(function() {
nameFound = $(this).find("name").text();
if(part.toLowerCase() == nameFound.toLowerCase())
{
xcoord = parseInt( $(this).find("xcoord").text() );
ycoord = parseInt( $(this).find("ycoord").text() );
width = parseInt( $(this).find("width").text() );
height = parseInt($(this).find("height").text() );
}
});
i = i + 1;
}
},
error: function(){
}
});
xml文件位于本地服务器上,此代码用于HTA(HTML应用程序文件)。是否有更有效的方法来遍历xml文件?现在,大约需要15-20秒来获取~150份的信息。我正在计算我正在进行的查询以获取零件数/零件名称(我注释掉了AJAX代码),并且这些查询的大部分数量都在200毫秒以下。
任何帮助将不胜感激!
答案 0 :(得分:0)
当您执行$(data)
时,您正在解析整个XML数据并在循环内创建一个新对象。
相反,你应该把它放在你的循环之前,你应该看到一个显着的差异。以下是更新代码的相关部分:
...
var $data = $(data); // Do this once
while (covCnt >= i)
{
part = DKB.GetClearedPart(i); //Returns name of part
$data.find("part").each(function() {
...