2011-12-29 3 views
5

単体テストでは、返された特定のオブジェクトがXML文書であるかどうかを確認できます。そうする最善の方法は何ですか?オブジェクトがXML文書(クロスブラウザーの方法で)であるかどうかをテストする方法

私は現在、doc.implementation(頭に浮かんだ最初のDOMプロパティ)をテストしていますが、より良い方法がありますか?また、HTML文書からXML文書を区別する良い方法はありますか?

+0

'doc.doctype'はDOCTYPEノードです。 doctypeノードはhtmlではなくXHTMLでなければなりません。 – Raynos

+0

私の文書はXHTMLではないので、doctypeはありません。しかし、チップのおかげで。 – hugomg

答えて

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ドキュメントを作成することができます。あなたは、それが有効なXMLであることをDOMにロードすると仮定することができます。

+0

これは**単体テスト**を書くためのものです。 XML文書を返すことになっている特定の関数がそうであるかどうかを確認する必要があります。 – hugomg

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; 
}; 
関連する問題