我试图通过所有标签的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");
浏览器中没有显示任何内容。所以请帮助我,坚持下去。
答案 0 :(得分:3)
看起来你有三个错误:
在第15行,您正在使用:
var x=xmlDoc.getElementsById("0");
应该是:
var x=xmlDoc.getElementById("0");
如果你没有发现差异:
您正在使用getElementsById
何时使用getElementById()
您的计算机上是文件,还是服务器上的文件(包括家庭服务器(XAMPP,easyPHP等))
XMLHttpRequest()
仅在HTTP服务器上有效。
我收到这些错误:
您可以安装其中之一:
我建议使用XAMPP或easyPHP,因为它们更易于设置。
然后将您的XML和HTML文件放在htdocs文件夹中。
最后,转到您的服务器并导航到您的HTML文件。
它适用于我的:
HTML文件的输出:
您需要在文件中使用DTD才能在某些浏览器中使用它,或者您可以将id
属性更改为xml:id
。它适用于大多数(可能是所有)现代浏览器。
更新: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");
字母字符非常重要