@@ -377,6 +377,17 @@ export class XMLBuilderImpl implements XMLBuilder {
377377
378378 const importedNode = node . node
379379
380+ const updateImportedNodeNs = ( clone : Element ) => {
381+ // update namespace of imported node only when not specified
382+ if ( ! clone . _namespace ) {
383+ const [ prefix ] = namespace_extractQName (
384+ clone . prefix ? clone . prefix + ':' + clone . localName : clone . localName
385+ ) ;
386+ const namespace = hostNode . lookupNamespaceURI ( prefix )
387+ new XMLBuilderImpl ( clone ) . _updateNamespace ( namespace )
388+ }
389+ } ;
390+
380391 if ( Guard . isDocumentNode ( importedNode ) ) {
381392 // import document node
382393 const elementNode = importedNode . documentElement
@@ -385,28 +396,22 @@ export class XMLBuilderImpl implements XMLBuilder {
385396 }
386397 const clone = hostDoc . importNode ( elementNode , true ) as Element
387398 hostNode . appendChild ( clone )
388- const [ prefix ] = namespace_extractQName ( clone . prefix ? clone . prefix + ':' + clone . localName : clone . localName )
389- const namespace = hostNode . lookupNamespaceURI ( prefix )
390- new XMLBuilderImpl ( clone ) . _updateNamespace ( namespace )
399+ updateImportedNodeNs ( clone )
391400 } else if ( Guard . isDocumentFragmentNode ( importedNode ) ) {
392401 // import child nodes
393402 for ( const childNode of importedNode . childNodes ) {
394403 const clone = hostDoc . importNode ( childNode , true )
395404 hostNode . appendChild ( clone )
396405 if ( Guard . isElementNode ( clone ) ) {
397- const [ prefix ] = namespace_extractQName ( clone . prefix ? clone . prefix + ':' + clone . localName : clone . localName )
398- const namespace = hostNode . lookupNamespaceURI ( prefix )
399- new XMLBuilderImpl ( clone ) . _updateNamespace ( namespace )
406+ updateImportedNodeNs ( clone )
400407 }
401408 }
402409 } else {
403410 // import node
404411 const clone = hostDoc . importNode ( importedNode , true )
405412 hostNode . appendChild ( clone )
406413 if ( Guard . isElementNode ( clone ) ) {
407- const [ prefix ] = namespace_extractQName ( clone . prefix ? clone . prefix + ':' + clone . localName : clone . localName )
408- const namespace = hostNode . lookupNamespaceURI ( prefix )
409- new XMLBuilderImpl ( clone ) . _updateNamespace ( namespace )
414+ updateImportedNodeNs ( clone )
410415 }
411416 }
412417
@@ -766,7 +771,7 @@ export class XMLBuilderImpl implements XMLBuilder {
766771 for ( const childNode of ele . childNodes ) {
767772 const newChildNode = childNode . cloneNode ( true )
768773 newEle . appendChild ( newChildNode )
769- if ( Guard . isElementNode ( newChildNode ) ) {
774+ if ( Guard . isElementNode ( newChildNode ) && ! newChildNode . _namespace ) {
770775 const [ newChildNodePrefix ] = namespace_extractQName ( newChildNode . prefix ? newChildNode . prefix + ':' + newChildNode . localName : newChildNode . localName )
771776 const newChildNodeNS = newEle . lookupNamespaceURI ( newChildNodePrefix )
772777 new XMLBuilderImpl ( newChildNode ) . _updateNamespace ( newChildNodeNS )
0 commit comments