цикл JavaScript для получения данных из XML - PullRequest
0 голосов
/ 13 июня 2011

У меня есть этот 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 голосов
/ 13 июня 2011

В строке:

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

getElementsByTagName возвращает живой NodeList . Если вы измените его на:

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

теперь вы можете перебирать все элементы DEVS в документе.

Что касается хранения всех значений, они уже есть в документе XML, поэтому вы можете рассмотреть функцию, которая возвращает значения по мере необходимости, или получить их все в цикле и сохранить их в объекте (но вам, вероятно, придется перебрать объект, чтобы вернуть его, как вы это делали вначале, чтобы поместить их туда).

0 голосов
/ 13 июня 2011

Вам нужен цикл для 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
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...