2011-12-29 2 views
5

단위 테스트의 경우 특정 반환 된 개체가 XML 문서인지 확인할 수 있어야합니다. 그렇게하는 가장 좋은 방법은 무엇입니까?개체가 XML 문서 (크로스 브라우저 방식)인지 테스트하는 방법

저는 현재 doc.implementation (마음에 들었던 첫 번째 DOM 속성)을 테스트하고 있지만 더 좋은 방법이 있습니까? 또한 HTML 문서에서 XML 문서를 구분할 수있는 좋은 방법이 있습니까?

+0

'doc.doctype'는 문서 타입 노드입니다. doctype 노드는 HTML이 아닌 XHTML이어야합니다. – Raynos

+0

내 문서는 XHTML이 아니므로 Doctype이 없습니다. 하지만 팁 주셔서 감사합니다. – hugomg

답변

1
function isXML(xmlStr){ 
    var parseXml; 

    if (typeof window.DOMParser != "undefined") { 
    parseXml = function(xmlStr) { 
     return (new window.DOMParser()).parseFromString(xmlStr, "text/xml"); 
    }; 
    } else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) { 
    parseXml = function(xmlStr) { 
     var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = "false"; 
     xmlDoc.loadXML(xmlStr); 
     return xmlDoc; 
    }; 
    } else { 
    return false; 
    } 

    try { 
    parseXml(xmlStr); 
    } catch (e) { 
    return false; 
    } 
    return true;  
} 
0

내가 그런 경우 현재 http://www.javascriptkit.com/dhtmltutors/getxml3.shtml

유사한 구현을 다하고 있으리라 믿고있어, 나는 그것이 꽤하지 알고하지만 당신은 단순히 시도/잡기에 포장 할 수 없습니다? 또는 XML인지 구체적으로 다른 유형인지 알아야합니까? 그럴 경우 다른 주장을하지 않고도 할 수 있을지 확신 할 수 없습니다. try catch는 최소한 화면에 오류를 던지지 않고 객체에서 XML 문서를 만들 수있게합니다. DOM에 유효한 XML이로드된다고 가정 할 수 있습니다.

+0

** 단위 테스트 **를 작성하기위한 것입니다. XML 문서를 반환해야하는 특정 함수가 실제로 그렇게하는지 확인해야합니다. – hugomg

3

아이디어를 얻으려면 jQuery.isXMLDoc의 구현을 살펴볼 것입니다. 그것은 here, 코드 자체가 지글 지글 라이브러리에 있음을 밝혀 :

Sizzle.isXML = function(elem) { 
    // documentElement is verified for cases where it doesn't yet exist 
    // (such as loading iframes in IE - #4833) 
    var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; 

    return documentElement ? documentElement.nodeName !== "HTML" : false; 
}; 
관련 문제