2013-03-27 44 views
0

我無法使用getElementsByTagName從xml文件中獲取數據。我應該使用什麼?getElementsByTagName not working javascript,XML,google maps

這裏是XML:

<?xml version="1.0" encoding="UTF-8"?> 
<markers> 
    <marker> 
     <lat>37.427770</lat> 
     <lng>-122.144841</lng> 
     <name>Jackie</name> 
    </marker> 
    <marker> 
     <lat>37.413320</lat> 
     <lng>-122.125604</lng> 
     <name>Peter</name> 
    </marker> 
</markers> 

整個HTML文件:

<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps JavaScript API v3 Example: Common Loader</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> 
    </script> 
<script type="text/javascript" src="util.js"></script> 
<script type="text/javascript"> 
var infowindow; 
var map; 

function initialize() { 
var myLatlng = new google.maps.LatLng(37.4419, -122.1419); 
var myOptions = { 
    zoom: 13, 
    center: myLatlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
} 
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
downloadUrl("moredata.xml", function(data) { 
    var markers = data.documentElement.getElementsByTagName("marker"); 
    for (var i = 0; i < markers.length; i++) { 
    var latlng = new 
google.maps.LatLng(parseFloat(markers[i].getElementsByTagName("lat")), 
           parseFloat(markers[i].getElementsByTagName("lng"))); 
    var marker = createMarker(markers[i].getElementsByTagName("name"), latlng); 
    } 
}); 
} 

function createMarker(name, latlng) { 
var marker = new google.maps.Marker({position: latlng, map: map}); 
google.maps.event.addListener(marker, "click", function() { 
    if (infowindow) infowindow.close(); 
    infowindow = new google.maps.InfoWindow({content: name}); 
    infowindow.open(map, marker); 
}); 
return marker; 
} 

</script> 
</head> 
<body onload="initialize()"> 
<div id="map_canvas" style="width:400px; height:300px"></div> 
</body> 
</html> 

該文件http://gmaps-samples-v3.googlecode.com/svn/trunk/xmlparsing/downloadurl_info.html

即時通訊的編輯版本試圖獲取數據,而無需使用屬性

+0

「標題」 標籤是大小寫保留的情況下html。你可以改變它到不同的標籤,並嘗試?另外,「getElementsByTagName」返回數組。所以,你解析「lat」/「lng」的方式在這裏可能不起作用。分享您的html文件,以便我們可以在這裏進行測試。 – devsathish 2013-03-27 13:34:24

+0

我改變了它,但它仍然不起作用 – user2208358 2013-03-27 13:38:16

+1

「不工作」是什麼意思?請提供一個更好的解釋你的問題。發生了什麼,你期望發生什麼?你有任何錯誤? – 2013-03-27 13:41:04

回答

0

首先,var markers = data.documentElement.getElementsByTagName("marker");將導致一個空的節點列表,因爲在XML中完全沒有<marker>元素。

接下來,parseFloat(markers[i].getElementsByTagName("lat")將無法​​正常工作。假設markers[i]將是<title>元素,getElementsByTagName將返回NodeList<lat>元素 - 這是您可能不能parseFloat

相反,你將需要得到第一個列表中的元素,訪問它的第一TextNode,並從它那裏得到的nodeValue - 從<lat>或至少以某種方式獲取textContent

然後,回調函數看起來像

function(data) { 
    var markers = data.documentElement.getElementsByTagName("title"); // or "marker", after you've changed it 
    console.log(markers); 
    for (var i=0; i<markers.length; i++) { 
     var lats = markers[i].getElementsByTagName("lat"), 
      lngs = markers[i].getElementsByTagName("lng"), 
      names = markers[i].getElementsByTagName("name"); 
     if (lats.length && lngs.length) { 
      console.log("contents:", lats[0].textContent, lats[0].textContent); 
      var lat = parseFloat(lats[0].textContent), 
       lng = parseFloat(lats[0].textContent); 
     } else console.log("didn't found <lat>/<lng>"); 
     if (!isNaN(lat) && !isNaN(lng) && names.length) { 
      var name = names[0].textContent, 
       latlng = new google.maps.LatLng(lat, lng), 
       marker = createMarker(name, latlng); 
       console.log("created marker", name, marker); 
     } 
    } 
} 
+0

我沒有工作。地圖不再顯示在瀏覽器中 – user2208358 2013-03-27 14:16:31

+0

你有任何錯誤?你是否在''元素上使用''title''選擇器? – Bergi 2013-03-27 14:22:48

+0

沒有錯誤,我使用標記 – user2208358 2013-03-27 14:30:35

0

我認爲這個問題是在,

var markers = data.documentElement.getElementsByTagName("marker"); 

嘗試將其更改爲,

var markers = data.getElementsByTagName("marker");