2011-06-13 6 views
0

내 XML을 반복하여 내 데이터를 가져 오는이 JavaScript가 있습니다. 여기 XML에서 데이터를 가져 오는 자바 스크립트 루프

는 내가 가지고있는 자바 스크립트 코드입니다 : 내가 변수 (또는 여러 변수)가 필요

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);   
    }); 
} 

별도로 모든 디바이스에 대한 모든 데이터를 포함하고 나는이 루프에 포함하는 방법을 잘 모르겠습니다 . 서로 다른 폴리선을 서로 연결하지 않고 다른 장치를 표시 할 수 있어야합니다.

어떻게 해결할 수 있습니까?

답변

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를 반복하고 모든 데이터를 가져옵니다. 여전히 나에게 명확하지 않은 것은 데이터 []에서 데이터를 어떻게 정렬합니까? 나는 아직 자바 스크립트에 익숙하지 않고 아직 배열에 익숙하지 않다. 난 단지 dev1 [], dev2 [] 등등과 같은 각 DEV에 대한 데이터가있는 배열을 말할 수 있습니다. 할 수 있습니까? –

+0

그렇게 할 수는 있지만 모든 것을 하나의 객체에 넣어야합니다. 위의 편집 된 코드를 참조하십시오. – glortho

+0

좋습니다, 제안 해 주셔서 감사합니다.하지만 여전히 목표를 달성 할 수 없습니다. :) 내가 가지고있는 완전한 코드가 위의 수정 된 코드를 살펴 보시겠습니까? –

0

:

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

getElementsByTagName 라이브 NodeList를를 반환합니다. 다음과 같이 변경하면 :

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

이제 문서의 모든 DEVS 요소를 반복 할 수 있습니다.

모든 값을 저장하는 데 이미 XML 문서에 값을 저장 했으므로 필요에 따라 값을 반환하거나 루프에서 모두 값을 가져 와서 객체에 저장하는 기능을 고려할 수 있습니다 (단, 그렇다면 처음에 거기에 넣었던 것처럼 objet을 루프하여 객체를 가져와야 할 가능성이 큽니다.

관련 문제