2012-11-23 42 views
6

javascriptを使用して複数の名前空間をXML要素にアタッチしようとしています。 私は役に立たない方法を試しました。 。:( 私は通常使用している無地のJavaScript古いが短いこの例を維持するために、これは私がやっているjQueryを介して行われることになるかです:xmlns名前空間の属性をjavascriptのXMLに追加する方法

ChromeとFFの両方で
var soapEnvelope = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"></soapenv:Envelope>'; 
var jXML = jQuery.parseXML(soapEnvelope); 
$(jXML.documentElement).attr("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); 

、この期待通りの結果が得られます。

<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 

しかしIE9で、私はこのような結果が得られます。

<soapenv:Envelope 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:NS1="" NS1:xmlns:xsd="http://www.w3.org/2001/XMLSchema"/> 

そして、私はIE9は私の名前空間には、このNS1プレフィックスを追加することなく、この名前空間属性を追加する方法を見つけることができません。また、この結果を$ .parseXML(結果)に戻してみると、不正な形式のXML例外が発生します。

名前空間がIEで宣言されている方法とは何かを誤解していますか、誰かがブラウザ間で一貫した結果を得る方法を提案できますか?誰がこれに同様の問題に遭遇した場合には、事前

答えて

4

おかげで、私はそれがjQueryのそれをしない方法とは異なってIEのXML DOMオブジェクトを初期化して固定することができることを見つけることになりました。私は次のようなものを使用しましたが、今ではxml名前空間がすべての主要なブラウザで正常に動作しているように見え、jQueryのattrメソッドも再び動作します。

var getIEXMLDOM = function() { 
    var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0' ]; 
    for (var i = 0; i < progIDs.length; i++) { 
    try { 
     var xmlDOM = new ActiveXObject(progIDs[i]); 
     return xmlDOM; 
    } catch (ex) { } 
    } 
    return null; 
} 

var xmlDOM; 
if ($.browser.msie) { 
    xmlDOM = getIEXMLDOM(); 
    xmlDOM.loadXML(soapEnvelope); 
} else { 
    xmlDOM = jQuery.parseXML(soapEnvelope); 
} 

$(xmlDOM.documentElement).attr("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); 
+1

+1。とにかく、ブラウザのテストを変更する必要があります。現時点では独自の方法が好まれていますが、IE 9+では 'window.DOMParser'がサポートされています。これはjQueryのデフォルト設定です。 'if($ window.msie)'をしないで 'if(!window.DOMParser)'を実行します。また、ここでは、MSXMLで名前空間宣言を作成することについて素早くまとめています:http://msmvps.com/blogs/martin_honnen/archive/2009/04/15/creating-xml-with-namespaces-with-javascript-and- msxml.aspx – Tomalak

+0

乾杯@Tomalak – 2potatocakes

+0

jQueryを使用しない場合:var objXmlDomParser = new DOMParser(); xmlDOM = objXmlDomParser.parseFromString(soapEnvelope、 "text/xml"); xmlDOM.documentElement.setAttribute( "xmlns:xsd"、 "http://www.w3.org/2001/XMLSchema"); –

関連する問題