1

すべてのタグの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"); 

ブラウザには何も表示されません。だから私を助けてください、これで立ち往生しています。

4

5 に答える 5

4

getElementByIdは、名前が「ID」の属性ではなく、タイプ「ID」の属性を持つ要素を返します。XMLファイルに対応するDTDがないと、定義されたタイプの属性がないため、getElementByIdは常にnullを返します。http://reference.sitepoint.com/javascript/Document/getElementById

W3Schoolsは、DTDの使用方法を説明するのに非常に優れています。http://www.w3schools.com/dtd/default.asp

このルートを使用する場合は、XML要素にもっと一般的な名前を使用し、属性を使用して、その要素が参照している部屋またはアプライアンスを説明することをお勧めします(たとえば、<bedroom id = "0">の代わりに) <zone room = "bedroom" id = "0">を使用するか、<fan id="00">の代わりに<appliancename= "fan" id = "00">を使用してください)。そうしないと、DTDが大きくなり、困難になります。本当に必要以上に維持します。

于 2012-04-09T17:47:03.117 に答える
3

次の3つのエラーがあるようです。


  1. 15行目では、次を使用しています。

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

    そのはず:

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

    違いを見つけていない場合:

    使用していますgetElementsById

    使用する必要がある場合getElementById()

    これがMDNドキュメントですgetElementById()

  2. ファイルはコンピューター上にありますか、それともサーバー上にありますか(ホームサーバー(XAMPP、easyPHPなど)を含む)

    XMLHttpRequest()HTTPサーバー上にある場合にのみ機能します。

    これらのエラーが発生します: エラー

    次のいずれかをインストールできます。

    XAMPPまたはeasyPHPはセットアップがはるかに簡単なので、使用することをお勧めします。

    次に、XMLファイルとHTMLファイルをhtdocsフォルダーに配置します。

    最後に、サーバーに移動してHTMLファイルに移動します。

    それは私のもので動作します:

    HTMLファイルへの出力:

    ほら、うまくいく!

  3. 一部のブラウザで機能させるには、ファイルにDTDが必要です。または、id属性をに変更することもできますxml:id。これは、ほとんどの(おそらくすべての)最新のブラウザーで機能します。


更新: OPはコードをからgetElementsById()に変更しましたgetElementById()

于 2012-04-09T10:14:11.190 に答える
2

getElementByIdを使用してください

getElementsByIdではありません

于 2012-04-09T10:08:46.187 に答える
2
var x=xmlDoc.getElementsById("0")

そのはず

var x=xmlDoc.getElementById("0")

いいえgetElementsbyId

于 2012-04-09T10:09:35.080 に答える
0

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

アルファベット文字は非常に重要です

于 2014-03-11T07:10:49.530 に答える