2011-12-29 8 views
5

Bir birim testi için, belirli bir döndürülen nesnenin bir XML belgesi olup olmadığını kontrol edebilmek istiyorum. Bunu yapmanın en iyi yolu nedir?Nesnenin bir XML belgesi olup olmadığını nasıl test etmeliyim (çapraz tarayıcı olarak)

Şu anda yalnızca doc.implementation (akla ilk gelen DOM özelliği) için test yapıyorum, ancak daha iyi bir yolu var mı? Ayrıca, XML belgelerini HTML belgelerinden ayırmanın iyi bir yolu var mı?

+0

'doc.doctype' Doctype düğümdür. Doctype düğümü, html yerine XHTML olmalıdır. – Raynos

+0

Belgelerim XHTML değil, dolayısıyla doktrinleri yok. Ama bahşiş için teşekkürler. – hugomg

cevap

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

Ben Eğer durum buysa o anda

benzer bir uygulaması yapıyorsanız varsayarak ediyorum, güzel değil biliyorum ama sadece sadece try/catch sar ki? Ya da, XML olup olmadığını ve özellikle başka türde olmadığını bilmeniz gerekir. Eğer durum buysa, başka iddialarda bulunmadan yapabileceğinizden emin değilim. Bir try catch, en azından, ekrana bir hata atmadan bir nesneden bir XML belgesi oluşturmanıza izin verecektir. O zaman, geçerli XML olduğu için DOM'a yüklerse, bunu kabul edebilirdiniz.

+0

Bu, bir ** birim testi ** yazmak içindir. Bir XML belgesini döndürmesi gereken belirli bir işlevin bunu yapıp yapmadığını kontrol edebilmem gerekir. – hugomg

3

Fikirler için jQuery.isXMLDoc uygulamasına bir göz atabilirim. Bu here, kod kendisine Sizzle kütüphanesinde olduğu ortaya çıktı:

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; 
}; 
İlgili konular