getElementById找不到结果

时间:2012-04-09 10:05:38

标签: javascript html xml dom

我试图通过所有标签的id解析xml文件。 这是我的xml

    <?xml version="1.0" encoding="UTF-8"?>
    <zones>
    <bedroom id="0">
       <fan id="00">on</fan>
       <tv id="01">off</tv>
    </bedroom>
    <hall id="1">
    <tube id="10">on</tube>
    <bulb id="11">off</bulb>
    <fan id="12">on</fan>
    <tv id="13">on</tv>
    <ac id="14">on</ac>
    </hall>
    <kitchen id="2">
    <freez id="20">on</freez>
    </kitchen>
    <toilet id="3">
        <bulb id="30">on</bulb>
    </toilet>
    <bathroom id="4">
        <heater id="40">on</heater>
    </bathroom>
   </zones>

这是我的代码..

     <html>
     <head> <meta http-equiv="refresh" content="1" > </head>
     <body>

      <script type="text/javascript" for="window" event="onload">
       if (window.XMLHttpRequest)
       {// code for IE7+, Firefox, Chrome, Opera, Safari
           xmlhttp=new XMLHttpRequest();
       }
        xmlhttp.open("GET","home.xml",false);
        xmlhttp.send();
        xmlDoc=xmlhttp.responseXML; 

        document.write("<table border='1'>");
        var x=xmlDoc.getElementById("0");
        for (i=0;i<x.length;i++)
        { 
            document.write("<tr><td>");
                document.write("fan");
                document.write("</td><td>");

                document.write(x[i].getElementsByTagName("fan")[0].childNodes[0].nodeValue);
               document.write("<tr><td>");
               document.write("tv");
               document.write("</td><td>");
               document.write(x[i].getElementsByTagName("tv")[0].childNodes[0].nodeValue);
               document.write("</td></tr>");
       }

       var x=xmlDoc.getElementsByTagName("hall");
       for (i=0;i<x.length;i++)
       { 
            document.write("<tr><td>");
                document.write("tube");
                document.write("</td><td>");

                document.write(x[i].getElementsByTagName("tube")  [0].childNodes[0].nodeValue);

                document.write("<tr><td>");
                document.write("bulb");
                document.write("</td><td>");
                document.write(x[i].getElementsByTagName("bulb") [0].childNodes[0].nodeValue);

               document.write("<tr><td>");
               document.write("fan");
               document.write("</td><td>");
               document.write(x[i].getElementsByTagName("fan")[0].childNodes[0].nodeValue);

               document.write("<tr><td>");
               document.write("tv");
               document.write("</td><td>");
               document.write(x[i].getElementsByTagName("tv")[0].childNodes[0].nodeValue);

               document.write("<tr><td>");
               document.write("ac");
               document.write("</td><td>");
               document.write(x[i].getElementsByTagName("ac")[0].childNodes[0].nodeValue);

               document.write("</td></tr>");
         }

         var x=xmlDoc.getElementsByTagName("kitchen");
         for (i=0;i<x.length;i++)
         { 
            document.write("<tr><td>");
                document.write("freez");
                document.write("</td><td>");

                document.write(x[i].getElementsByTagName("freez") [0].childNodes[0].nodeValue);
         }

         var x=xmlDoc.getElementsByTagName("toilet");
         for (i=0;i<x.length;i++)
         { 
            document.write("<tr><td>");
                document.write("bulb");
                document.write("</td><td>");

                document.write(x[i].getElementsByTagName("bulb") [0].childNodes[0].nodeValue);
         }

         var x=xmlDoc.getElementsByTagName("bathroom");
         for (i=0;i<x.length;i++)
         { 
            document.write("<tr><td>");
                document.write("heater");
                document.write("</td><td>");

                document.write(x[i].getElementsByTagName("heater") [0].childNodes[0].nodeValue);
         }

       document.write("</table>");

</script>
</body>
</html>

问题是当我用

实现我的代码时
var x=xmlDoc.getElementByTagName("bedroom");

一切正常。但是当我把它改为

var x=xmlDoc.getElementById("0"); 

浏览器中没有显示任何内容。所以请帮助我,坚持下去。

5 个答案:

答案 0 :(得分:3)

看起来你有三个错误:


  1. 在第15行,您正在使用:

    var x=xmlDoc.getElementsById("0");
    

    应该是:

    var x=xmlDoc.getElementById("0");
    

    如果你没有发现差异:

    您正在使用getElementsById

    何时使用getElementById()

    Here is MDN documentation for getElementById()

  2. 您的计算机上是文件,还是服务器上的文件(包括家庭服务器(XAMPP,easyPHP等))

    XMLHttpRequest()仅在HTTP服务器上有效。

    我收到这些错误: errors

    您可以安装其中之一:

    我建议使用XAMPP或easyPHP,因为它们更易于设置。

    然后将您的XML和HTML文件放在htdocs文件夹中。

    最后,转到您的服务器并导航到您的HTML文件。

    它适用于我的:

      

    HTML文件的输出:

         

    Look, it works!

  3. 您需要在文件中使用DTD才能在某些浏览器中使用它,或者您可以将id属性更改为xml:id。它适用于大多数(可能是所有)现代浏览器。


  4. 更新:OP已将代码从getElementsById()更改为getElementById()

答案 1 :(得分:3)

getElementById返回一个元素,该元素的属性类型为“ID”,而不是名称为“ID”的属性。如果没有DTD与XML文件一起使用,则没有定义类型的属性,因此getElementById将始终返回null。 http://reference.sitepoint.com/javascript/Document/getElementById

W3Schools在解释如何使用DTD方面做得非常好。 http://www.w3schools.com/dtd/default.asp

我建议如果你走这条路线,你考虑为你的XML元素使用一个更通用的名称,并使用一个属性来描述该元素引用的空间或应用(例如,而不是&lt; bedroom id = “0”&gt;使用&lt; zone room =“bedroom”id =“0”&gt;或代替&lt; fan id =“00”&gt;使用&lt; appliance name =“fan”id =“00”&gt; ),否则你的DTD会比实际需要的更大,更难维护。

答案 2 :(得分:2)

请使用 的getElementById

不 getElementsById

答案 3 :(得分:2)

var x=xmlDoc.getElementsById("0")

应该是

var x=xmlDoc.getElementById("0")

不是getElementsbyId

答案 4 :(得分:0)

var x=xmlDoc.getElementById("0");

字母字符非常重要