1

此代码接收一个 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 中以调试模式逐步运行它时,此代码运行良好。但是如果没有设置断点,当程序到达 <1> 行时,会显示一条错误消息: xmlDoc.getElementsByTagName("title").item(0) is null,这显然不是真的。

有趣是,当我尝试添加一行时

alert(xmlDoc.getElementsByTagName("title").length)

在 <1> 行之前,它会弹出一个显示 0 的窗口,但是当我单击“确定”后,正确的标题(来自 XML)将显示在新窗口中!就像在逐步模式中一样。

我尝试过的事情:

1、xmlDoc.getElementsByTagName("title").item(0)改成xmlDoc.getElementsByTagName("title")[0]

没用,调试器告诉我“xmlDoc.getElementsByTagName("title")[0] is undefined”

2,删除了XML文件中标签内或标签之间的所有空格,没有帮助。

4

1 回答 1

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);

请注意,我在调用加载函数之前将附加事件处理程序的行移动到加载事件。

于 2012-09-28T06:52:49.960 回答