XML,Javascript - 无法调用方法getElementsByTagName为null

时间:2013-06-10 03:06:34

标签: javascript html xml getelementsbytagname

我正在研究一个小小的网站创意,我对此并不是很了解。我基本上有一个HTML测验,它将提示用户我在XML中定义的问题。

window.onload = function xml() 
{
    // get form from HTML
    var form = document.getElementById("form");

    // get XML document
    if (window.XMLHttpRequest)
    {
            var xmlhttp = new XMLHttpRequest();
    }

    // open XML
    xmlhttp.open("GET", "questions.xml", false);
    xmlhttp.send(null);

    // initialize elements for do document, questions, and details
    var xmlDoc = xmlhttp.responseXML;
    var question = xmlDoc.getElementsByTagName("question");

在上面一行中,我收到一条错误消息“无法调用方法'getElementsByTagName'为null”。然而,奇怪的是,如果XML文件有多个“问题”标签,我只会得到错误。如果我的XML中只有一个“问题”标签,则整个功能完美无缺。所以我想知道在这种情况下发生了什么,以及为什么它对我不起作用。

(下面的其余代码显示了我开始使用该功能的地方)

    var qXML = xmlDoc.getElementsByTagName("q");

    // write values into HTML for each question
    for ( i = 0 ; i < question.length ; i++ )
    {
        // qBlock div for question
        var div = document.createElement('div');
        div.className = "qBlock";

此代码会持续一段时间以获取HTML中的所有字段。总的来说,循环中的这段代码一直在工作,除非有多个“问题”元素。

非常感谢能够帮助/教我任何这方面的人。也可以随意告诉我,如果我做错了什么。我对任何批评持开放态度。

1 个答案:

答案 0 :(得分:2)

虽然如果没有看到questions.xml文件我无法确定这是问题,但您可能有多个根元素。例如:

<?xml version="1.0"?>
<question>...</question>
<question>...</question>

XML不允许这样做,并且无法解析。将它们包装在一个根元素中:

<?xml version="1.0"?>
<questions>
    <question>...</question>
    <question>...</question>
</questions>