为了进行单元测试,我希望能够检查特定的返回对象是否为XML文档。最好的方法是什么?
目前我只是测试了 doc.implementation
(首先想到的第一个DOM属性),但有没有更好的方法?此外,有没有一种简便的方法来区分XML文档和HTML文档?
为了进行单元测试,我希望能够检查特定的返回对象是否为XML文档。最好的方法是什么?
目前我只是测试了 doc.implementation
(首先想到的第一个DOM属性),但有没有更好的方法?此外,有没有一种简便的方法来区分XML文档和HTML文档?
我建议参考jQuery.isXMLDoc的实现思路。事实证明,代码本身在Sizzle库中,这里:
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;
};
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;
}
我假设你目前正在进行类似于http://www.javascriptkit.com/dhtmltutors/getxml3.shtml的实现。
如果是这样,我知道这不太好看,但你能不能简单地用try/catch包装它呢?或者,你需要知道它是否是XML而不是其他类型。如果是这种情况,除非进行一些其他断言,否则我不确定你能否判断。使用try catch至少可以让你从对象中创建一个XML文档,而不会将错误抛出到屏幕上。然后你可以假设,如果它加载到DOM中,那么它就是有效的XML。
doc.doctype
是 doctype 节点。doctype 节点应该是 XHTML 而不是 html。 - Raynos