对于单元测试,我希望能够检查某个返回的对象是否为XML文档。最好的办法是什么?我应该如何测试对象是否是XML文档(以跨浏览器的方式)
我目前只是测试doc.implementation
(想到的第一个DOM属性),但有没有更好的方法?另外,是否有一种很好的方式来区分HTML文档中的XML文档?
对于单元测试,我希望能够检查某个返回的对象是否为XML文档。最好的办法是什么?我应该如何测试对象是否是XML文档(以跨浏览器的方式)
我目前只是测试doc.implementation
(想到的第一个DOM属性),但有没有更好的方法?另外,是否有一种很好的方式来区分HTML文档中的XML文档?
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;
}
我假设你正在做类似
的实现。如果是那样的话,我知道这是不漂亮,但不能你根本只是包装在try/catch语句?或者,你需要知道它是否是XML,特别是不是其他类型。如果是这种情况,我不确定你可以不做其他断言。 try catch至少可以让你从一个对象创建一个XML文档而不会在屏幕上产生错误。那么你可以假设,如果它加载到DOM中它是有效的XML。
这是写**单元测试**。我需要能够检查某个函数是否应该返回一个真实的XML文档。 – hugomg 2011-12-30 14:31:32
我想看看执行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;
};
'doc.doctype'是DOCTYPE节点。 doctype节点应该是XHTML而不是html。 – Raynos 2011-12-30 14:39:42
我的文档不是XHTML,所以他们没有文档类型。但谢谢你的提示。 – hugomg 2011-12-30 22:20:16