2011-01-19 67 views
0

你好,我有问题解析XML .. 我有这样的XML:为什么我无法在JavaScript中解析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); 

    } 

i可以执行此代码

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

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

+0

你能提供调用loadXML的代码吗? – Zach 2011-01-19 07:03:57

+0

我向服务器发出请求后调用loadXML – user495688 2011-01-19 07:12:25

+0

为什么使用这种方法? XHR在各种浏览器中得到更好的支持。 “document.load()是旧版本的W3C DOM Level 3 Load&Save模块的一部分,可以与document.async一起使用,以指示请求是同步的还是异步的(默认)。至少Gecko 1.9,这不再支持跨站点加载文件(改为使用XMLHttpRequest)。“ - https://developer.mozilla.org/en/DOM/document.load – Quentin 2011-01-19 09:01:41

回答

1

尝试在load()调用之前放置onload处理函数。如果您先调用load(),那么在您分配处理程序来处理它之前,会发生onload事件。就像这样:

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

首先,我第二戴维·多沃德的建议:使用XMLHttpRequest代替,这将在所有主要的浏览器。代码如下。

其次,你readXML功能是有缺陷的,因为大多数浏览器将包括childNodes集合中的空白文本节点,所以xmlDoc.documentElement.childNodes[0]实际上是一个文本节点,没有tagName财产。当您在遍历childNodes时,我会建议使用getElementsByTagName()或检查每个节点的nodeType属性。

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

var url = "http://localhost:8080/coba/api/artikan/"+sel+"/"+hasilStemSel+"/"+hasilStem; 

var readXML = function(xmlDoc) { 
    alert(xmlDoc.documentElement.tagName); 
    var kategori = xmlDoc.getElementsByTagName("kategori")[0]; 
    alert(kategori.tagName); 
}; 

var createXmlHttpRequest = (function() { 
    var factories = [ 
     function() { return new XMLHttpRequest(); }, 
     function() { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }, 
     function() { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }, 
     function() { return new ActiveXObject("Microsoft.XMLHTTP"); } 
    ]; 

    for (var i = 0, len = factories.length; i < len; ++i) { 
     try { 
      if (factories[i]()) { 
       return factories[i]; 
      } 
     } 
     catch (e) {} 
    } 
})(); 

var xmlHttp = createXmlHttpRequest(); 
xmlHttp.onreadystatechange = function() { 
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { 
     readXML(xmlHttp.responseXML); 
    } 
}; 

xmlHttp.open("GET", url, true); 
xmlHttp.send(null); 
相关问题