神州教育培训网 打造高端培训课程,传播精品教育理念! 神州教育 神州培训 教育 企业培训 企业内训 企业管理 研修课程 简章 资本运作 房地产 国学 名师推荐

关于JavaScript解析XML的性能的问题(已解决)

下面是我写的一个根据路径从XML文档中取值的方法,在XML节点比较少时,性能还可以,但如果节点太多,性能就不行了,大家看看哪里还能再优化?

 

 1/*  获取XML对象中某个节点的值,支持下标
 2    例:GetNodeValue(xmlDoc, 'root/channel[1]/title[3]');
 3        
 4    xmlObj:XML对象;
 5    path:要获取值的节点路径,如:'root/channel[1]/title[3]',不加下标时自动选择第一个,找不到节点时返回空;
 6*/

 7function GetNodeValue(xmlObj, path)
 8{
 9    var tempNodes = xmlObj;
10    if (!tempNodes) return '';
11    var tns = path.split('/');
12    var reg = /.*(\[(\d+)\])/;
13    var isGet = false//判断是否获取到了值
14    for (var i = 0, l = tns.length; i < l; i++)
15    {
16        //提出名字与下标值
17        var tmp_name = tns[i];
18        var tmp_sub = 0;
19        var tmp_array = tmp_name.match(reg);
20        if (tmp_array != null)
21        {
22            tmp_sub = tmp_array[2];
23            tmp_name = tmp_name.replace(tmp_array[1], '');
24        }

25        isGet = false;
26        try{
27            if (tempNodes) tempNodes = tempNodes.getElementsByTagName(tmp_name)[tmp_sub];
28        }

29        catch (e)
30        {
31            return '';
32        }

33        if (tempNodes) isGet = true;
34    }

35    if (isGet)
36    {
37        if (isIE)
38            return tempNodes.text;
39        else
40            return tempNodes.textContent
41    }

42    else
43        return '';
44}

45
46

 

性能提高85%的已经写出来了(此性能是经过测试的):

 

 1/*  
 2作者:Sandheart E-Mail:sxd.www@gmail.com 日期:2009-02-20
 3获取XML对象中某个节点的值,支持下标
 4例:GetNodeValue(xmlDoc, 'root/channel[1]/title[3]');
 5参数:        
 6xmlObj:XML对象;
 7path:要获取值的节点路径,如:'root/channel[1]/title[3]',不加下标时自动选择第一个,找不到节点时返回空;
 8*/

 9function GetNodeValue(xmlObj, path)
10{
11    //debugger;
12    var tempNodes = xmlObj;
13    if (!tempNodes) return '';
14    var tns = path.split('/');
15    var reg = /.*(\[(\d+)\])/;
16    var isGet = false//判断是否获取到了值
17    for (var i = 0, l = tns.length; i < l; i++)
18    {
19        //提出名字与下标值
20        var tmp_name = tns[i];
21        var tmp_sub = 0;
22        var tmp_array = tmp_name.match(reg);
23        if (tmp_array != null)
24        {
25            tmp_sub = tmp_array[2];
26            tmp_name = tmp_name.replace(tmp_array[1], '');
27        }

28        isGet = false;
29        try
30        {
31            tempNodes = tempNodes.selectNodes(tmp_name)[tmp_sub];
32            isGet = true;
33        }

34        catch (e)
35        {
36            return '';
37        }

38    }

39    if (isGet && tempNodes)
40    {
41        if (isIE)
42            return tempNodes.text;
43        else
44            return tempNodes.textContent
45    }

46    else
47        return '';
48}

49

 

如要使用此方法,请保留注释信息,谢谢。

 

posted on 2009-02-20 17:17  努力&快乐  阅读(1632)  评论(4编辑  收藏  举报

导航

神州教育培训网 打造高端培训课程,传播精品教育理念! 神州教育 神州培训 教育 企业培训 企业内训 企业管理 研修课程 简章 资本运作 房地产 国学 名师推荐