Javascript 로 XML을 불러오는 과정에서, 이전에는 잘 되었던 기능이 getElementsByTagName 을 읽지 못하였고,
확인해보니 XML을 불러오기는 하나, responseXML 만 Null 을 반환하는 경우가 생겼다.
기존 코드
var xhttp = new XMLHttpRequest();
var url = "../xml/test.xml"
if(xhttp){
xhttp.open("GET", url, true);
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.send();
}
function myFunction(xml) {
var xmlDoc = xml.responseXML;
var name = xmlDoc.getElementsByTagName("name");
var content = xmlDoc.getElementsByTagName("content");
~~ 중략 ~~
console을 통해 xmlDoc를 확인하니, responseXML 만 Null 이고, responseText등 다른 값은 불러오고 있는데,
추측컨데 xml 파일 내에서 Type이 정의되지 않아 발생하는 에러인 듯 보였다.
mimeType을 설정해보았으나 해결되지 않아, DOMparser를 이용해 responseText를 불러와 파싱하는 법을 택했다.
수정코드
// 기존코드
// xmlDoc 를 단순 responseXML 로 저장
var xmlDoc = xml.responseXML;
// 수정코드
// xmlDoc 를 responseXML 을 불러오면, 기존코드를 사용하고, 불러오지 못하면 responseText를 xml로 파싱
var xmlDoc
var parser = new DOMParser();
if(xml.responseXML){
xmlDoc = xml.responseXML;
} else {
xmlDoc = parser.parseFromString(xml.responseText, "application/xml");
}