Chrome说无法读取未定义的属性'nodeName',IE6很好,使用Google Map API

Siv*_*esh 0 javascript xml google-maps google-chrome nodename

我有一个以下结构的XML文件.

<NewDataSet>
 <markers>
  <name>name text</name>
  <desc>desc text</desc>
  <Lat>57.149328033771</Lat>
  <Long>-2.12561060173764</Long>
  <cost>9985</cost>
 </markers>
</NewDataSet>
Run Code Online (Sandbox Code Playgroud)

我正在使用Google Map API来解析和映射这些,使用以下Javascript.

 function load() {
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(47.614495, -122.341861), 13);

    GDownloadUrl("test1.xml", function(data) {
        var xml = GXml.parse(data);
        x= xml.documentElement;
        y = xml.documentElement.childNodes;
        alert(y.length);
        for (i=0;i<y.length;i++)
        {
            if (y[i].nodeType!=3)
            {
              alert(y[i].childNodes[0].nodeName + " : " + y[i].childNodes[0].childNodes[0].nodeValue); //name
            }
        }

    });
  }
}
Run Code Online (Sandbox Code Playgroud)

完整的xml和html文件都可以在这里下载:http : //domain2405544.sites.fasthosts.com/test/test1.htm http://domain2405544.sites.fasthosts.com/test/test1.xml

首先,我只是想解析这些数据.在IE6中工作正常(没有选择),它正确地提醒数据.但是当我在Chrome中加载相同的页面时告诉我:

Uncaught TypeError: Cannot read property 'nodeName' of undefined - line 29
Run Code Online (Sandbox Code Playgroud)

我正在使用相同的文件,因此可能存在我根本无法看到的潜在问题.有没有人知道为什么会发生这种情况?

谢谢

Tim*_*own 7

发生的事情是你正试图让文本节点的孩子们.Chrome将<name><markers>元素的子元素之前具有文本节点,而IE则不会.

您正在测试文档元素的每个子元素<NewDataSet>是否是文本节点,从而避免了该级别的问题,但您假设每个<markers>元素的第一个子元素是<name>实际上它是非IE浏览器中的文本节点的元素.

你最好使用getElementsByTagNameDOM节点来避免这个问题.这是一个改进版本:

GDownloadUrl("test1.xml", function(data) {
    var xml = xhr.responseXML;
    var root = xml.documentElement;
    var markers = root.getElementsByTagName("markers"), nameEl;

    for (var i = 0, len = markers.length; i < len; ++i) {
        nameEl = markers[i].getElementsByTagName("name")[0];
        alert(nameEl.firstChild.data);
    }
});
Run Code Online (Sandbox Code Playgroud)