您好,我想用javascript解析serverlist.xml到html网站。它的工作对我来说与国家,主机名,名称,地图,numplayers和MAXPLAYERS,但是当我想在html中使用JavaScript解析XML
table += x[i].getElementsByTagName("players")[0].childNodes[0].nodeValue;
解析的“玩家”的内容,那么我看不到任何东西。我想它是因为玩家标签有更多的孩子节点,但我不知道如何解决这个问题。谢谢你的帮助。
serverlist.xml
<qstat>
<server>
<hostname>1.2.3.4:27966</hostname>
<name>Server 1</name>
<gametype>Type 1</gametype>
<map>q3dm3</map>
<numplayers>3</numplayers>
<maxplayers>18</maxplayers>
<numspectators>0</numspectators>
<maxspectators>0</maxspectators>
<ping>0</ping>
<retries>0</retries>
<players>
<player>
<name>E.Krenz^GDR</name>
<score>6</score>
<ping>0</ping>
</player><player>
<name>G.Schroeder^GER</name>
<score>2</score>
<ping>0</ping>
</player>
<player>
<name>W.Ulbricht^GDR</name>
<score>1</score>
<ping>0</ping>
</player></players>
</server>
</qstat>
serverlist.html
<html>
<body>
<table id="demo"></table>
<script>
var x,xmlhttp,xmlDoc
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "../serverlist.xml", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
x = xmlDoc.getElementsByTagName("server");
table='<tr><th bgcolor="#333333">Players</th><th bgcolor="#333333">Country</th><th bgcolor="#333333">Servername</th><th bgcolor="#333333">IP</th><th bgcolor="#333333">Map</th><th bgcolor="#333333">Players</th><th bgcolor="#333333">Connect</th></tr>';
for (i = 0; i <x.length; i++) {
table += "<tr><td>";
table += x[i].getElementsByTagName("players")[0].childNodes[0].nodeValue;
table += "</td><td>";
table += '<iframe src="../serverlist/country/';
table += x[i].getElementsByTagName("hostname")[0].childNodes[0].nodeValue;
table += '.php" height="25px" width="27px" frameborder="0" scrolling="yes"></iframe>'
table += "</td><td>";
table += x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
table += "</td><td>";
table += x[i].getElementsByTagName("hostname")[0].childNodes[0].nodeValue;
table += "</td><td>";
table += x[i].getElementsByTagName("map")[0].childNodes[0].nodeValue;
table += "</td><td>";
table += x[i].getElementsByTagName("numplayers")[0].childNodes[0].nodeValue;
table += "/";
table += x[i].getElementsByTagName("maxplayers")[0].childNodes[0].nodeValue;
table += '</td><td><a href="hlsw://';
table += x[i].getElementsByTagName("hostname")[0].childNodes[0].nodeValue;
table += '/?Connect=1"><img src="../images/hlsw.jpg" width="13" height="13" border="0" />';
table += '<img src="../images/pixel.png" width="10" height="10" border="0" /><a href="qtracker://';
table += x[i].getElementsByTagName("hostname")[0].childNodes[0].nodeValue;
table += '?game=quake3&action=connect"><img src="../images/qtracker.jpg" width="13" height="13" border="0" /></a>'
table += '<img src="../images/pixel.png" width="10" height="10" border="0" /><a href="../serverlist/bat/';
table += x[i].getElementsByTagName("hostname")[0].childNodes[0].nodeValue;
table += '.bat"><img src="../images/bat.png" width="13" height="13" border="0" /></a>'
table += "</td></tr>";
}
document.getElementById("demo").innerHTML = table;
</script>
</body>
</html>
解析XML的DOM节点树结构,并通过它使用JavaScript的作品有所在某些浏览器中有所不同,具体取决于您使用的命令。解决这个问题将消除使用DOM结构时的一些“不可预见的问题”。它可以帮助将XML解析为对象树(就像使用JSON一样) - 之后您可以随心所欲地遍历,而不会出现奇怪的问题。我可以通过给你一个很好的“XML DOM to Object”解析器函数来回答这个问题。如果你想尝试这个,然后回来评论,我会用代码发布一个答案。 – argon
感谢您的回答。请发布您的代码。谢谢。 ;) – hansfrans