2011-06-13 39 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上找回來,就像你第一次把它放在那裏一樣)。