2011-12-29 57 views
5

对于单元测试,我希望能够检查某个返回的对象是否为XML文档。最好的办法是什么?我应该如何测试对象是否是XML文档(以跨浏览器的方式)

我目前只是测试doc.implementation(想到的第一个DOM属性),但有没有更好的方法?另外,是否有一种很好的方式来区分HTML文档中的XML文档?

+0

'doc.doctype'是DOCTYPE节点。 doctype节点应该是XHTML而不是html。 – Raynos 2011-12-30 14:39:42

+0

我的文档不是XHTML,所以他们没有文档类型。但谢谢你的提示。 – hugomg 2011-12-30 22:20:16

回答

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

我假设你正在做类似

的实现。如果是那样的话,我知道这是不漂亮,但不能你根本只是包装在try/catch语句?或者,你需要知道它是否是XML,特别是不是其他类型。如果是这种情况,我不确定你可以不做其他断言。 try catch至少可以让你从一个对象创建一个XML文档而不会在屏幕上产生错误。那么你可以假设,如果它加载到DOM中它是有效的XML。

+0

这是写**单元测试**。我需要能够检查某个函数是否应该返回一个真实的XML文档。 – hugomg 2011-12-30 14:31:32

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; 
}; 
相关问题