2011-06-13 31 views
0

我有这个JavaScript应该循环访问我的XML并获取我的数据。用于从XML获取数据的JavaScript循环

下面是javascript代码,我有:

function load() { 
     var map = new google.maps.Map(document.getElementById("map"), { 
     zoom: 13, 
     mapTypeId: 'roadmap' 
     }); 
     var infoWindow = new google.maps.InfoWindow; 
     var line =[]; 


    downloadUrl("exportintoxml2.php", function(data) { 
    var xml = data.responseXML; 
    var devs = xml.documentElement.getElementsByTagName("DEVS"), 
    data = {}; 
    for (var n = 0; n < devs.length; n++) { 
    var dev = devs[n], 
    markers = dev.getElementsByTagName("marker"), 
    dev_id = dev.getAttribute('DEVS'); 

    data[dev_id] = []; 

    for (var i = 0; i < markers.length; i++) { 
     var name = markers[i].getAttribute("USER"); 
     var imei = markers[i].getAttribute("IMEI"); 
     var gsm1 = markers[i].getAttribute("GSM1"); 
     var devices = markers[i].getAttribute("DEVS"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("LAT")), 
      parseFloat(markers[i].getAttribute("LON"))); 


     var html = "<b>" + name + "</b> <br/>" + imei; 
     var icon = customIcons[devices] || {}; 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: point, 
     icon: icon.icon, 
     shadow: icon.shadow 
     }); 
     bindInfoWindow(marker, map, infoWindow, html); 
    data[dev_id].push = ({ 'point' : point }); 

    line.push(data[1]); 
    } 
    } 



    map.setCenter(point, 16); 

var polyline = new google.maps.Polyline({ 
    path: line, 
    strokeColor: "#FF0000", 
    strokeOpacity: 1.0, 
    strokeWeight: 2 
}); 

    polyline.setMap(map);   
    }); 
} 

我需要一个变量(或几个变量),它包含所有每DEV数据分开,我不知道如何将它包含在这个循环。 我需要能够显示具有不同折线的不同设备,而不需要彼此连接。

这怎么解决?

回答

0

您需要一个用于devs的循环。

var devs = xml.documentElement.getElementsByTagName("DEVS"), 
    data = {}; // for storing the data after extraction 

for (var n = 0; n < devs.length; n++) { 
     var dev = devs[n], 
      markers = dev.getElementsByTagName("marker"), 
      dev_id = dev.getAttribute('devs'); 

     data[dev_id] = []; 

     for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("USER"); 
      var data1 = markers[i].getAttribute("DATA1"); 
      var data2 = markers[i].getAttribute("DATA2"); 
      var devs2 = markers[i].getAttribute("DEVS"); 
      data[dev_id].push({ 'name': name, 'data1': data1, 'data2': data2, 'devs': devs2 }); // store the data 
     } 
} 
+0

好的,谢谢你的循环。现在它遍历所有的DEVS并获取所有的数据。我仍然不清楚的是如何对数据中的数据进行排序[]?我仍然是新来的JavaScript,我还没有很好的数组。我只需要让我们说一个具有每个DEV的数据的数组,比如dev1 [],dev2 []等,可以这样做吗? – 2011-06-13 01:21:02

+0

你可以做到这一点,但你应该把它们放在一个物体中。看到上面编辑的代码。 – glortho 2011-06-13 03:03:18

+0

好的,非常感谢这个建议,但我仍然无法实现我的目标。 :)请你看看上面修改过的代码是我有的完整代码吗? – 2011-06-13 22:53:05

0

在行:

> var dev1 = 
> xml.documentElement.getElementsByTagName("DEVS")[0]; 

的getElementsByTagName返回现场节点列表。如果将其更改为:

var devs = xml.documentElement.getElementsByTagName("DEVS"); 

您现在可以遍历文档中的所有DEVS元素。

至于存储所有的值,你已经在XML文档中存储了它们,所以你可能会考虑一个函数,在你需要它的时候返回值,或者把它们全部放入一个循环中并存储在一个对象中(但那么你可能必须在objet上找回来,就像你第一次把它放在那里一样)。