2011-12-29 28 views
5

Để kiểm tra đơn vị, tôi muốn có thể kiểm tra xem đối tượng được trả về có phải là tài liệu XML hay không. Cách tốt nhất để làm như vậy là gì?Làm cách nào để kiểm tra nếu đối tượng là tài liệu XML (theo cách trình duyệt chéo)

Tôi hiện chỉ đang thử nghiệm cho doc.implementation (thuộc tính DOM đầu tiên được đề cập đến) nhưng có cách nào tốt hơn không? Ngoài ra, có cách nào tốt đẹp để phân biệt các tài liệu XML khỏi các tài liệu HTML không?

+0

'doc.doctype' là nút DOCTYPE. Nút doctype phải là XHTML thay vì html. – Raynos

+0

Tài liệu của tôi không phải là XHTML để chúng không có loại tài liệu. Nhưng cảm ơn về tiền boa. – hugomg

Trả lời

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

Tôi giả định rằng bạn đang làm một thực hiện tương tự như

Nếu đó là trường hợp, tôi biết nó không đẹp nhưng có thể không chỉ đơn giản là bạn chỉ cần quấn nó trong try/catch? Hoặc, bạn cần phải biết nếu nó là XML và đặc biệt không phải là một số loại khác. Nếu đó là trường hợp tôi không chắc chắn bạn có thể mà không làm cho một số khẳng định khác. Một thử bắt ít nhất sẽ cho phép bạn tạo một tài liệu XML từ một đối tượng mà không cần đưa ra một lỗi trên màn hình. Bạn có thể giả định rằng nếu nó tải vào DOM thì nó là XML hợp lệ.

+0

Điều này là để viết bài kiểm tra ** đơn vị **. Tôi cần có khả năng kiểm tra xem một hàm nào đó có nghĩa vụ trả về một tài liệu XML không. – hugomg

3

Tôi muốn xem xét triển khai jQuery.isXMLDoc để biết các ý tưởng. Nó chỉ ra rằng mã chính nó là trong thư viện sizzle, 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; 
}; 
Các vấn đề liên quan