2013-08-26 15 views
5

Potrzebuję załadować i odczytać plik XML za pomocą JavaScript.Odczytywanie pliku XML za pomocą JavaScript w przeglądarce Chrome

następujący kod działa poprawnie w Firefox, IE i Opera:

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 
} 

Ale wykonanie tego kodu w Chrome daje mi ten błąd:

Object# has no method "load"

+0

Czy to nie jest po prostu 'loadXML' zamiast' load'? – putvande

+0

Witam @ putvande .. dziękuję za odpowiedź mnie, nie mogę dostać od ciebie? Loadxml to tylko funkcja, która bierze od strony internetowej w3school.my problem jest chrome przeglądarka nie będzie działać dobrze .. jakiś pomysł na mój problem? – user2711066

+0

Dlaczego warto używać obiektu XMLDocument zamiast DOMParser/Microsoft.XMLDOM? Możesz załadować tekst xml za pomocą żądania xhmlhttp. – HMR

Odpowiedz

4

Kod Legacy

document.implementation.createDocument nie pracować w Chrome i Safari.

Zastosowanie XMLHttpRequest zamiast gdy to możliwe:

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 
    } 
    } 
} 

Nowoczesne przeglądarki

Jeśli kierujesz nowoczesnych przeglądarek (> IE6), wystarczy użyć XMLHttpRequest:

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

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

    return xhr.responseXML 
} 
+0

dobrze ustawić! Twój kod jest dla mnie całkowicie zadziwiający. To działa dobrze dla mnie ... – user2711066

+0

czy ActiveXObject nie jest przestarzały dla nowoczesnych przeglądarek? – mmcrae

1

On MDN, istnieją wskazówki dotyczące korzystania z XMLHttpRequest. Ale nie jest jasne z DOMImplementation.createDocument, dopóki nie wywiercony zostanie typ zwracania i zobacz, że XMLDocument nie jest obsługiwany w Google Chrome. example on W3Schools używa XMLHttpRequest.

0

śledzić to wydrukować, obciążenie, dołącz xml data.Here xml jest przechowywany jako ciąg wewnątrz metoda javascript.This działa w Chrome, Firefox ma nadzieję, będzie działać w innych też

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> 


} 

napisałem tę odpowiedź here

Powiązane problemy