Javascript 未捕获类型错误:无法读取属性';子节点';未定义的不在Chrome和Mozilla中工作

Javascript 未捕获类型错误:无法读取属性';子节点';未定义的不在Chrome和Mozilla中工作,javascript,html,xml,google-chrome,dom,Javascript,Html,Xml,Google Chrome,Dom,我是XML/HTML节点的新手,正在编写代码,这在IE中很好用,但在其他浏览器中却不行。 下面是一段令人担忧的代码: if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp =new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","SMoutput.xml",false); xmlhttp.send();

我是XML/HTML节点的新手,正在编写代码,这在IE中很好用,但在其他浏览器中却不行。 下面是一段令人担忧的代码:

if (window.XMLHttpRequest)
  {
  xmlhttp = new XMLHttpRequest();
  }
else
  {
  xmlhttp =new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.open("GET","SMoutput.xml",false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;

//xmlDoc.async="false";
//xmlDoc.load("./SMoutput.xml");

var Server=xmlDoc.documentElement;
var fts = Server.childNodes[1];
var rows = Server.childNodes.length;
var cols = fts.childNodes.length;

var body = document.getElementsByTagName("body")[0];
//var tabl = document.createElement("table");
var tabl = document.getElementById("ftsinfo");
var tblBody = document.createElement("tbody");

for (var i = 0; i < rows; i++)
{
    var row = document.createElement("tr");
    var length=0;
    fts = Server.childNodes[i];

    for (var j = 0; j < cols; j++)
    {
        var cell = document.createElement("td");


        ***var define=fts.childNodes[j].childNodes[0].nodeValue;
        var cellText = document.createTextNode(define);***


        cell.appendChild(cellText);
        row.appendChild(cell);

        length= length+cell.innerText.length;
        //cell.innerText= length

        if ( length > max)
        {
            max=length;
        }


        if(cell.innerText=="Up")
        {
            cell.innerText=""
            //cell.innerText= max
            cell.style.backgroundImage="url('up.png')";

        }

        if(cell.innerText=="Down")
        {
            cell.innerText=""
            //cell.innerText= max
            cell.style.backgroundImage="url('down.png')";


        }


        row.style.fontSize= "14";
        row.style.color= "black";
    }

tblBody.appendChild(row);
tabl.appendChild(tblBody);
tabl.setAttribute("border", "1");
当我打开链接时,chrome不会加载数据,并说“`

未捕获的TypeError:无法读取未定义“”的属性“childNodes”


,当它通过第一行变量define=fts.childNodes[j].childNodes[0].nodeValue时

我只想从childnodes获取文本值,并将其传递到要显示的celltext变量中

这是工作在IE,但不是在其他浏览器,我也是新的这些。发现很难破解。请帮忙

以下是SMoutput.xml的示例:

<network>
 <server>
<name>PROD JBOSS Service</name>
<host>Hostname1</host>
<port>Portnumber1</port>
<result>Up</result>
</server>
<server>
<name>PROD Database</name>
<host>Hostname2</host>
<port>Portnumber2</port>
<result>Down</result>
</server>

PROD JBOSS服务
主机名1
端口号1
向上的
产品数据库
主机名2
端口号2
向下

我建议不要使用
childNodes
集合,因为这取决于元素节点之间的空白文本节点,以及DOM实现是否将它们包含到树中。不同的实现可以得到不同的结果。相反,一旦您拥有
xmlDoc=xmlhttp.responseXML
,您可以使用
getElementsByTagName

var serverElements = xmlDoc.getElementsByTagName("server");
for (var i = 0, l = serverElements.length; i < l; i++) {
  var server = serverElements[i];
  var nameEl = server.getElementsByTagName("name")[0];
  var hostEl = server.getElementsByTagName("host")[0];
  var portEl = server.getElementsByTagName("port")[0];
  var resultEl = server.getElementsByTagName("result")[0];
  // now here you can extract the data, for older versions of IE you need to access the `.text` property, for other browsers and recent version the `.textContent` property e.g.
  var name = nameEl.textContent ? nameEl.textContent : nameEl.text;
  var host = hostEl.textContent ? hostEl.textContent : hostEl.text;
  // here you can add the `name`, `host` etc. to your HTML table
}
var serverElements=xmlDoc.getElementsByTagName(“服务器”);
for(var i=0,l=serverElements.length;i
请发布导致该错误的XML的最小示例。var define=fts.childNodes[j]。childNodes[0]。nodeValue;var cellText=document.createTextNode(定义);是导致问题的代码段..我收到此错误:Uncaught TypeError:无法读取undefined“的属性'childNodes',我们需要查看导致该错误的
SMoutput.xml
的最小示例。抱歉,我误解了…下面是SMoutput.xml的示例:
<network>
 <server>
<name>PROD JBOSS Service</name>
<host>Hostname1</host>
<port>Portnumber1</port>
<result>Up</result>
</server>
<server>
<name>PROD Database</name>
<host>Hostname2</host>
<port>Portnumber2</port>
<result>Down</result>
</server>
var serverElements = xmlDoc.getElementsByTagName("server");
for (var i = 0, l = serverElements.length; i < l; i++) {
  var server = serverElements[i];
  var nameEl = server.getElementsByTagName("name")[0];
  var hostEl = server.getElementsByTagName("host")[0];
  var portEl = server.getElementsByTagName("port")[0];
  var resultEl = server.getElementsByTagName("result")[0];
  // now here you can extract the data, for older versions of IE you need to access the `.text` property, for other browsers and recent version the `.textContent` property e.g.
  var name = nameEl.textContent ? nameEl.textContent : nameEl.text;
  var host = hostEl.textContent ? hostEl.textContent : hostEl.text;
  // here you can add the `name`, `host` etc. to your HTML table
}