为什么我不能在javascript中解析xml?

时间:2011-01-19 06:46:49

标签: javascript firefox xml-parsing

你好我有解析xml的问题.. 我有像这样的xml:

<tejemahan>
  <kategori> komputer </kategori>
  <hasil> aplikasi komputer </hasil>
</terjemahan>

编辑:   上面的xml我就是这样:

   var url="http://localhost:8080/inlinetrans/api/translate/"+userSelection+"/"+hasilStemSel+"/"+hasilStem;
   var client = new XMLHttpRequest();
   client.open("GET", url, false);
   client.setRequestHeader("Content-Type", "text/plain");
   client.send(null);

   if(client.status == 200)
       alert("the request success"+client.responseText);
   else
       alert("the request isn't success"+client.status+""+client.statusText)

  }

这是我解析上面的xml文件的代码:

this.loadXML = function (){
   var url = http://localhost:8080/coba/api/artikan/"+sel+"/"+hasilStemSel+"/"+hasilStem
   xmlDoc=document.implementation.createDocument("","",null);
   xmlDoc.load("url");
   xmlDoc.onload= this.readXML;
  }

  this.readXML = function() {
        alert(xmlDoc.documentElement.tagName);
 alert(xmlDoc.documentElement.childNodes[0].tagName);
 alert(xmlDoc.documentElement.childNodes[1].tagName);
 alert(xmlDoc.documentElement.childNodes[0].textContent);
 alert(xmlDoc.documentElement.childNodes[1].textContent);

     }

我可以执行此代码

xmlDoc=document.implementation.createDocument("","",null); 
xmlDoc.load("url");

但为什么我不能执行此代码  xmlDoc.load = this.readXML ???

2 个答案:

答案 0 :(得分:1)

尝试在load()调用之前放置onload handler赋值。如果首先调用load(),则在分配处理程序以处理它之前会发生onload事件。像这样:

xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.onload= this.readXML;
xmlDoc.load("url");

答案 1 :(得分:1)

首先,我是David Dorward的第二个建议:改为使用XMLHttpRequest,这将适用于所有主流浏览器。代码如下。

其次,您的readXML函数存在缺陷,因为大多数浏览器都会在childNodes集合中包含空白文本节点,因此xmlDoc.documentElement.childNodes[0]实际上是文本节点且没有{{1属性。我建议您在迭代tagName时使用getElementsByTagName()或检查每个节点的nodeType属性。

第三,您的XML无效:childNodes<tejemahan>不匹配,尽管这可能是您提问中的拼写错误。

</terjemahan>