2011-01-19 13 views
0

こんにちは私は、XMLを解析するために問題を抱えている... 私はこのようなXMLがあります。なぜ私はj​​avascriptで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

+0

サーバにリクエストした後にloadXMLを呼び出します – user495688

+0

なぜこのアプローチを使用していますか? XHRはブラウザ間でサポートされています。 "document.load()は、W3C DOM Level 3 Load&Saveモジュールの古いバージョンの一部です。document.asyncとともに使用して、要求が同期か非同期かを示します(デフォルト)。 1.9では、ドキュメントのクロスサイトロードをサポートしなくなりました(XMLHttpRequestを代わりに使用してください)。 - https://developer.mozilla.org/en/DOM/document.load – Quentin

答えて

1

load()呼び出しの前にonloadハンドラの割り当てを入れてみてください。 load()を最初に呼び出すと、onloadイベントはハンドラを処理する前に発生します。このように:

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

私はしようとしました..しかし、それは動作しません.. – user495688

1

まず、私は2番目のデイビット・ドーウォードの提案:、代わりにXMLHttpRequestを使用するすべての主要なブラウザで動作しますました。コードは以下のとおりです。

第二に、あなたのreadXML機能は、ほとんどのブラウザがそうxmlDoc.documentElement.childNodes[0]が実際にテキストノードであることと全くtagName性質を持っていないだろう、childNodesコレクション内の空白のテキストノードが含まれるので、欠陥があります。私はgetElementsByTagName()を使用するか、またはchildNodesを反復しながら各ノードのnodeTypeプロパティをチェックすることをお勧めします。

第3に、<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); 
+0

それはまだ働くことができませんTim..i上記の私のコードを使用し、私はchildNodeの長さを取得しますが、私はxmlの内容を読むことができません – user495688

+0

@ user495688:あなたがどんなエラーを出しているのか、どこでどこを見ているのか、もう少し明確になりますか?おそらく私たちが見ることができるテストページ? –

+0

@ user495688: 'readXML'関数に' getElementsByTagName() 'の使用例を追加しました。 –

関連する問題