Ich bin ein wenig stecken stecken versucht, mehrere Namespaces zu einem XML-Element über JavaScript über Browser anschließen. Ich habe über ein Dutzend verschiedene Möglichkeiten vergeblich versucht. . ich :( bin mit Ebene in der Regel alt Javascript sondern um dieses Beispiel kurz zu halten, das ist, wie, was ich tue über jQuery getan werden würde:Wie fügen Sie zusätzliche Xmlns Namespace-Attribute zu XML in Javascript
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");
sowohl in Chrome und FF, das arbeitet wie erwartet und gibt ein Ergebnis wie folgt aus:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
Aber in IE9, bekomme ich ein Ergebnis wie folgt aus:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:NS1="" NS1:xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
Und ich kann nicht einen Weg hinzufügen, um dieses Namespace-Attribut ohne IE9 Hinzufügen dieses NS1 Präfix meiner Namespaces finden. Auch wenn ich versuche, dieses Ergebnis wieder in $ .parseXML (Ergebnis) zu übergeben, erhalte ich eine fehlerhafte XML-Ausnahme.
Missverstehe ich etwas mit der Art und Weise, wie Namespaces im IE deklariert werden, oder kann jemand vorschlagen, wie ich ein konsistentes Ergebnis in allen Browsern erzielen kann?
Vielen Dank im Voraus
+1. Wie auch immer, du solltest deinen Browsertest modifizieren. Derzeit bevorzugen Sie den proprietären Ansatz, aber IE 9+ unterstützt 'window.DOMParser', was jQuery standardmäßig intern ist. Tun Sie nicht 'if ($ .browser.msie)', tun Sie 'if (! Window.DOMParser)'. Hier ist auch eine nette Zusammenfassung über das Erstellen von Namespace-Deklarationen in MSXML: http://msmvps.com/blogs/martin_honnen/archive/2009/04/15/creating-xml-with-namespaces-with-javascript-and- msxml.aspx – Tomalak
Prost @Tomalak – 2potatocakes
Ohne jQuery: var objXmlDomParser = new DOMParser(); xmlDOM = objXmlDomParser.parseFromString (soapEnvelope, "text/xml"); xmlDOM.documentElement.setAttribute ("xmlns: xsd", "http://www.w3.org/2001/XMLSchema"); –