当前位置: 首页 > 知识库问答 >
问题:

html+google.maps.infowindow()+外部源xml文档(XMLHttpRequest)

冯曾笑
2023-03-14

我有一个HTML页面,其中主机谷歌地图信息控件。我能够在html文档中显示一个给出硬编码的静态值的标记。现在我正在尝试从XML外部源文档中获取值。这就是我想做的,

function initialize(Object) {

var mapOptions = {
center: new google.maps.LatLng(19.314059,84.801407),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP,
marker:true
};

var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","cd_catalog.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 
var x=xmlDoc.getElementsByTagName("CD");

for (i = 0; i < x.length; i++) {
var LatLat = x[i].getElementsByTagName("COUNTRY")[0].childNodes[0].nodeValue;
var LongLong = x[i].getElementsByTagName("COMPANY")[0].childNodes[0].nodeValue;
var Title = x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue;
var myLatlng = new google.maps.LatLng(LatLat, LongLong);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: Title
});

}
}
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<CATALOG>
    <CD>
        <TITLE>Ambupa Bauri Street</TITLE>
        <ARTIST>56</ARTIST>
        <COUNTRY>19.3173287566233</COUNTRY>
        <COMPANY>84.8497137612449</COMPANY>
    </CD>
    <CD>
        <TITLE>Anadrigam</TITLE>
        <ARTIST>64</ARTIST>
        <COUNTRY>19.3128836507433</COUNTRY>
        <COMPANY>84.7996238277367</COMPANY>
    </CD>
</CATALOG>

我的标签如下所示,

<body onload="if (onLoad) onLoad(); initialize()">

这不起作用,任何帮助都将被感激。

共有1个答案

爱博达
2023-03-14

首先,代码不能很好地工作,因为其中有一些bug。就像你没有提到事件监听器的标记信息窗口一样。

google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
  infowindow.setContent(locations[i][0]);
  infowindow.open(map, marker);
}
})(marker, i));

你可以从

Google Maps API v3:带有多个标记的自动居中地图

**编辑以获得更多答案**

//GET NODE LENGTH
function getNodeLength(nodeName, xmlNode){
    return xmlNode.getElementsByTagName(nodeName).length;
}

//GET NODE VALUE
function getNodeValue(nodeName, xmlNode, i){
    return xmlNode.getElementsByTagName(nodeName)[i].firstChild.nodeValue;
}

function getExtendedNodeValue(nodeName, xmlNode, i)
{
    var node = "";

    if(typeof(xmlNode.getElementsByTagName(nodeName)[i]) != "undefined" && xmlNode.getElementsByTagName(nodeName)[i].hasChildNodes())
    node = xmlNode.getElementsByTagName(nodeName)[i].firstChild.nodeValue;

    return node; 
 }


 function getAttributeValue(i, nodename, data){
    return data[i].getAttribute(nodename);
 }

现在,根据您的情况,您可以使用上面的代码,如下所示:

var len = getNodeLength(xmlDoc,"CD");

for(i=0;i<len;i++)
{
   var latLat = getExtendedNodeValue("COUNTRY",xmlDoc,i);    
}
 类似资料:
  • Generators 相关文章 The Basics Of ES6 Generators By Kyle Simpson ES6 generators in depth By Axel Rauschmayer redux-saga 相关文章 Redux nowadays : From actions creators to sagas By Riad Benguella Managing Side

  • 全局配置 在 nuxt.config.js 中配置你想引用的资源文件: module.exports = { head: { script: [ { src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js' } ], link: [ { rel: 'style

  • 问题内容: 在我的pom.xml中,出现以下错误。我之所以要使用Spring 2 NTLM身份验证。 如果我添加以下内容。 我没有上面没有错误 编辑1 根据PSR的建议,添加以下依赖项时发生错误 问题答案: 问题会由于一种依赖关系而来,请尝试先删除所有显示的依赖关系,然后尝试逐一添加,然后我们才能找出问题所在

  • 我有这个错误,我不知道它可能是什么,我留下了一些项目类 xml: 应用Context.xml: Principal.java 错误: SLF4J:未能加载类“org.SLF4J.impl.StaticLoggerBinder”。SLF4J:默认为无操作(NOP)记录器实现SLF4J:请参阅http://www.slf4j.org/codes.html#StaticLoggerBinder了解更多细

  • 我对如何做到这一点有点困惑,所有的文档/示例都展示了如何读取和编辑xml文档,但似乎没有任何从头开始创建xml的明确方法,我宁愿不必将我的程序与虚拟xml文件一起发布以编辑一个。有什么想法吗?谢谢。

  • XML(可扩展标记语言)是一种非常流行的简单基于文本的语言,可用作不同应用程序之间的通信模式。 它被认为是传输和存储数据的标准方法。