Re: "xnlns" node attribute removed when using XMLHttpRequest.send( document ) [ or XMLSerializer.serializeToString( node ) ] in firefox 3
Axel Hecht <[email protected]> Sat, 08 Dec 2007 00:08:54 +0530
| Newsgroups | gmane.comp.mozilla.devel.xml |
|---|---|
| Message-ID | <[email protected]> |
[email protected] wrote: > Maybe this belongs in the javascript section but here we go anyway. > > I've been working on getting my javascript code compatable with > Firefox 3 and ran into a problem. > I am switching alot of code blocks from: > > appendNode( node ); > > to something similar to: > > var newNode = document.importNode( node, true ); > appendNode ( newNode ); > > to comply with the new strict enforcement of "nodes cannot be owned > by two different documents" in firefox 3 (gecko 1.9). > > The problem am I running into is that when sending a document via AJAX > using XMLHttpRequest.send( document ) method it looks like the > appended node is losing it's "xmlns" attribute when undergoing > serialization. This can also be reproduced by using > XMLSerializer.serializeToString( node ) call. > > Running the same code in firefox 2 doesn't cause this issue. > > So my question is, what's changed in firefox 3? What do I have to do > to maintain the "xmlns" attribute on this appended node when sending > via XMLHttpRequest? > > I can throw together a test example if it is necessary. Firefox 2 XMLSerializer had a bug when child nodes of an element with a default namespace had no namespace, IIRC. You might be hitting that. Like, if you newNode has no namespace, the Fx3 XMLSerializer will ensure that the serialized document has xmlns attributes ensuring that the default namespace is none. Note that setting the xmlns attribute on a node does not change the namespace, and that the xmlns attributes in the serialization will be set such that the original namespaces will be restored on parsing. Additionally, no, there is no way to change the namespace of an existing DOM node (at least I'm pretty sure there isn't). Axel