2013-08-26 2 views
5

JavaScript를 사용하여 XML 파일을로드하고 읽어야합니다.Chrome에서 JavaScript를 사용하여 XML 파일 읽기

다음 코드는 파이어 폭스에서 잘 작동, IE와 오페라 :

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 
} 

그러나 크롬에서이 코드를 실행하는 것은 나에게이 오류 제공 :

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

현대 브라우저

당신은 최신 브라우저를 (> IE6)를 대상으로하는 경우, 단지 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

잘 설정! 귀하의 코드는 완전히 나를 놀라게하고 있습니다. 그것은 나에게 잘 작동 ... – user2711066

+0

ActiveXObject는 최신 브라우저에 대한 지원이 중단 되었습니까? – mmcrae

1

에 MDN, XMLHttpRequest를 사용할 지침이 있습니다. 하지만 DOMImplementation.createDocument는 반환 유형을 조사하고 Google 크롬에서 XMLDocument이 지원되지 않는다는 사실을 알기 전까지는 명확하지 않습니다. example on W3Schools은 XMLHttpRequest를 사용합니다.

0

하는 javascript.This 방법은 크롬에서 작동 내부 data.Here의 XML이 문자열로 저장되고, 부하를 인쇄 XML을 추가하기 위해 다음과 파이어 폭스는 내가이 답변을 게시 너무 다른 사람

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