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)
我正在使用相同的文件,因此可能存在我根本无法看到的潜在问题.有没有人知道为什么会发生这种情况?
谢谢
发生的事情是你正试图让文本节点的孩子们.Chrome将<name>
在<markers>
元素的子元素之前具有文本节点,而IE则不会.
您正在测试文档元素的每个子元素<NewDataSet>
是否是文本节点,从而避免了该级别的问题,但您假设每个<markers>
元素的第一个子元素是<name>
实际上它是非IE浏览器中的文本节点的元素.
你最好使用getElementsByTagName
DOM节点来避免这个问题.这是一个改进版本:
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)
归档时间: |
|
查看次数: |
23040 次 |
最近记录: |