2013-08-26 227 views
5

JavaScriptを使用してXMLファイルを読み込んで読み込む必要があります。ChromeでJavaScriptを使用してXMLファイルを読む

function loadXMLDoc(dname) { 
    var xmlDoc 

    // Internet Explorer 
    try { 
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM') 
    } 
    catch (e) { 
    // Firefox, Opera, etc. 
    try { 
     xmlDoc = document.implementation.createDocument('', '', null) 
    } 
    catch (e) { 
     alert(e.message) 
    } 
    } 

    try { 
    xmlDoc.async = false 
    xmlDoc.load(dname) 
    return xmlDoc 
    } 
    catch (e) { 
    alert(e.message) 
    } 

    return null 
} 

しかし、Chromeでこのコードを実行すると、私は、このエラーを与える:

次のコードは、Firefox、IEとOperaでは正常に動作

Object# has no method "load"

+0

'load'ではなく' loadXML'だけではありませんか? – putvande

+0

こんにちは@ putvande ..あなたに感謝して、私はあなたから得ることができないのですか? Loadxmlは、w3schoolのウェブサイトから取得する機能です。私の問題は、クロームブラウザがうまく動作しません..私の問題のための任意のアイデア? – user2711066

+0

なぜDOMParser/Microsoft.XMLDOMの代わりにXMLDocumentオブジェクトを使用するのですか? xhmlhttpリクエストでxmlテキストを読み込むことができます。 – HMR

答えて

4

レガシーコード

document.implementation.createDocumentありませんChromeとSafariで動作します。

利用代わりXMLHttpRequest可能:

function loadXMLSync(url) { 
    try { 
    // Prefer XMLHttpRequest when available 
    var xhr = new XMLHttpRequest() 
    xhr.open('GET', url, false) 
    xhr.setRequestHeader('Content-Type', 'text/xml') 
    xhr.send() 

    return xmlhttp.responseXML 
    } 
    catch (e) { 
    // XMLHttpRequest not available, fallback on ActiveXObject 
    try { 
     var activex = new ActiveXObject('Microsoft.XMLDOM') 
     activex.async = false 
     activex.load(url) 

     return activex 
    } 
    catch (e) { 
     // Neither XMLHttpRequest or ActiveXObject are available 
     return undefined 
    } 
    } 
} 

最近のブラウザ

あなただけのXMLHttpRequestを使用し、(> IE6)最新のブラウザをターゲットに設定している場合:オン

function loadXMLSync(url) { 
    var xhr = new XMLHttpRequest() 

    xhr.open('GET', url, false) 
    xhr.setRequestHeader('Content-Type', 'text/xml') 
    xhr.send() 

    return xhr.responseXML 
} 
+0

よくセット!あなたのコードは私には全く驚きです。それは私にうまくいきました... – user2711066

+0

ActiveXObjectは現代のブラウザでは推奨されていませんか? – mmcrae

1

をMDNでは、XMLHttpRequestを使用するガイダンスがあります。 DOMImplementation.createDocumentでは、戻り値の型にドリルダウンし、XMLDocumentがGoogle Chromeでサポートされていないことがわかるまではっきりしません。 example on W3SchoolsはXMLHttpRequestを使用します。 javascript.Thisメソッド内の文字列は、クロムで働くよう

0

XML data.Here XMLを追加し、印刷に負荷をこれに従うが格納されている、Firefoxはそれが他の人にすぎ

txt="<papers>"+"<paper>"+ 
"<author>athor name</author>"+ 
"<title>title</title>"+ 
"<path>path</path>"+ 
"<track>which tack</track>"+ 
"</paper>"+ 
"<paper>"+ 
"<author>athor name</author>"+ 
"<title>title</title>"+ 
"<path>path</path>"+ 
"<track>which tack</track>"+ 
"</paper>"+ 
"<paper>"+ 
"<author>athor name</author>"+ 
"<title>title</title>"+ 
"<path>path</path>"+ 
"<track>which tack</track>"+ 
"</paper>"+ 
"<papers>"; 
if (window.DOMParser) 
    { 
     parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(txt,"text/xml"); 

    } 
    else // Internet Explorer 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(txt); 
    } 

x=xmlDoc.getElementsByTagName("paper"); 
for (var i = 0; i < x.length; i++) { 
    var athor =x[i].childNodes[0].firstChild.nodeValue; 
    var title = x[i].childNodes[1].firstChild.nodeValue; 
    var path = x[i].childNodes[2].firstChild.nodeValue; 
    var tack =x[i].childNodes[3].firstChild.nodeValue; 
    //do something with these values... 
    //each iteration gives one paper details  
    var xml=document.getElementById("element_id");//<div id="element_id"></div> 
    var li = document.createElement("br");// create a new <br> 
    newlink = document.createElement('A'); // creating an <a> element 
    newlink.innerHTML = athor;// adding <a>athor value here</a> 
    newlink.setAttribute('href', path);// <a href="path"></a> 

    newlink.appendChild(li);// <a href="path">athor</a><br> 
    document.getElementById("element_id").appendChild(newlink); 
//finaly it becomes <div id="element_id"><a href="path">athor</a><br></div> 


} 

に動作することを期待している私はこの答えhereを掲載しました

関連する問題