此代码接收xml文件并解析它并作为表输出。这是一段代码(面向Firefox):
function viewXML(inputForm) {
var URL=inputForm.URL.value; //input XML URL
// create document and load URL
var xmlDoc = document.implementation.createDocument("","doc",null);
xmlDoc.load(URL);
xmlDoc.onload = generateHTML(xmlDoc);
hWin = window.open("","sth", "height=800,width=600");
hWin.document.write(html_text);
hWin.document.close();
}
viewXML是按钮的onClick功能。现在是generateHTML()
中的一段代码:
function generateHTML(xmlDoc) {
...
caption=xmlDoc.getElementsByTagName("title").item(0).firstChild.nodeValue; //<1>
html_text += "<caption align='left'><h1>" + caption + "</h1></caption>";
...
}
一段XML文件:
<catalog>
<title>Airbus_Aircraft_Families</title>
<aircraft>
<Airbus>A380</Airbus>
<Aircraft>A380</Aircraft>
<seats>555</seats>
<Range>15000km</Range>
<Wingspan>78.8m</Wingspan>
<Height>24.1m</Height>
</aircraft>
</catalog>
问题: 当我在Firebug中一步一步地在调试模式下运行它时,此代码工作正常。但是如果没有设置断点,当程序点击行&lt; 1&gt;时,将显示错误说: xmlDoc.getElementsByTagName(“title”)。item(0)为null ,显然不是真的。
有趣的是,当我尝试添加一行
时alert(xmlDoc.getElementsByTagName("title").length)
&lt; 1&gt;之前的行,它会弹出一个窗口显示0,但点击“确定”后,CORRECT标题(来自XML)将显示在新窗口中!正如逐步模式一样。
我尝试的事情:
1,将xmlDoc.getElementsByTagName("title").item(0)
更改为xmlDoc.getElementsByTagName("title")[0]
没用,调试器告诉我“xmlDoc.getElementsByTagName(”title“)[0]未定义”
2,删除了XML文件中标签内或标签之间的所有空格,但没有帮助。
答案 0 :(得分:0)
问题可能是由于您的文档是异步加载的。您可以在此处查看document.async财产。我想如果你将这个属性设置为false,你的代码就可以工作。
// create document and load URL
var xmlDoc = document.implementation.createDocument("","doc",null);
xmlDoc.async = false;
xmlDoc.onload = generateHTML(xmlDoc);
xmlDoc.load(URL);
请注意,在调用load函数之前,我将附加事件处理程序的行移动到load事件。