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); 
相關問題