2013-08-26 20 views
5

Tôi cần tải và đọc tệp XML bằng JavaScript.Đọc tệp XML bằng JavaScript trong Chrome

Các mã sau hoạt động tốt trong Firefox, IE và 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 
} 

Nhưng thực thi mã này trong Chrome mang lại cho tôi lỗi này:

Object# has no method "load"

+0

Không chỉ 'loadXML' thay vì' tải'? – putvande

+0

Hi @ putvande..Cảm ơn bạn đã trả lời tôi, tôi không thể nhận được từ bạn? Loadxml chỉ là chức năng lấy từ trang web w3school.my vấn đề là trình duyệt chrome sẽ không làm việc tốt .. bất kỳ ý tưởng cho vấn đề của tôi? – user2711066

+0

Tại sao lại sử dụng đối tượng XMLDocument thay vì DOMParser/Microsoft.XMLDOM? Bạn có thể tải văn bản xml với yêu cầu xhmlhttp. – HMR

Trả lời

4

Legacy Mã

document.implementation.createDocument không làm việc trên Chrome và Safari.

Sử dụng XMLHttpRequest thay khi có thể:

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

Modern trình duyệt

Nếu bạn đang nhắm mục tiêu các trình duyệt hiện đại (> IE6), chỉ cần sử dụng 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

cũng được thiết lập! mã của bạn là hoàn toàn tuyệt vời với tôi .. Nó làm việc tốt với tôi ... – user2711066

+0

không phải là ActiveXObject không dùng cho các trình duyệt hiện đại? – mmcrae

1

On MDN, có hướng dẫn sử dụng XMLHttpRequest. Nhưng nó không rõ ràng từ DOMImplementation.createDocument cho đến khi bạn đi sâu vào kiểu trả về và thấy rằng XMLDocument không được hỗ trợ trong Google Chrome. example on W3Schools sử dụng XMLHttpRequest.

0

theo này để in, tải, nối thêm xml data.Here xml được lưu giữ như chuỗi bên trong phương pháp javascript.This làm việc trong chrome, firefox hy vọng nó sẽ làm việc trong những người khác quá

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> 


} 

tôi đăng câu trả lời này here