我有这个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的所有数据,我不知道如何将它包含在这个循环中。 我需要能够显示具有不同折线的不同设备,而不会彼此连接。
如何解决这个问题?
答案 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来取回它们,就像你在第一时间把它们放在那里一样。)