用于从XML获取数据的javascript循环

时间:2011-06-13 00:24:44

标签: javascript xml google-maps-api-3

我有这个JavaScript应该遍历我的XML并获取我的数据。

这是我的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的所有数据,我不知道如何将它包含在这个循环中。 我需要能够显示具有不同折线的不同设备,而不会彼此连接。

如何解决这个问题?

2 个答案:

答案 0 :(得分: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
      }
}

答案 1 :(得分:0)

在行中:

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

getElementsByTagName 返回实时 NodeList 。如果您将其更改为:

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

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

至于所有值的存储,您已经在XML文档中使用它们,因此您可以考虑一个根据需要返回值的函数,或者将它们全部放在循环中并将它们存储在对象中(但是你可能不得不绕过objet来取回它们,就像你在第一时间把它们放在那里一样。)