]> granicus.if.org Git - php/commitdiff
fix bug #47848 (importNode doesn't preserve attribute namespaces)
authorRob Richards <rrichards@php.net>
Thu, 3 Dec 2009 20:19:38 +0000 (20:19 +0000)
committerRob Richards <rrichards@php.net>
Thu, 3 Dec 2009 20:19:38 +0000 (20:19 +0000)
add tests

ext/dom/document.c
ext/dom/tests/bug47848.phpt [new file with mode: 0644]

index f7cc69e03862414492953ac627db6e085615653a..8f2f5482b38484d375c31bb7c1d8f3eefba86288 100644 (file)
@@ -1205,7 +1205,18 @@ PHP_FUNCTION(dom_document_import_node)
                if (!retnodep) {
                        RETURN_FALSE;
                }
-               
+
+               if ((retnodep->type == XML_ATTRIBUTE_NODE) && (nodep->ns != NULL)) {
+                       xmlNsPtr nsptr = NULL;
+                       xmlNodePtr root = xmlDocGetRootElement(docp);
+
+                       nsptr = xmlSearchNsByHref (nodep->doc, root, nodep->ns->href);
+                       if (nsptr == NULL) {
+                               int errorcode;
+                               nsptr = dom_get_ns(root, nodep->ns->href, &errorcode, nodep->ns->prefix);
+                       }
+                       xmlSetNs(retnodep, nsptr);
+               }
        }
 
        DOM_RET_OBJ(rv, (xmlNodePtr) retnodep, &ret, intern);
diff --git a/ext/dom/tests/bug47848.phpt b/ext/dom/tests/bug47848.phpt
new file mode 100644 (file)
index 0000000..b4453c7
--- /dev/null
@@ -0,0 +1,25 @@
+--TEST--
+Bug #47848 (importNode doesn't preserve attribute namespaces)
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php 
+
+$aDOM = new DOMDocument();
+$aDOM->appendChild($aDOM->createElementNS('http://friend2friend.net/','f2f:a'));
+
+$fromdom = new DOMDocument();
+$fromdom->loadXML('<data xmlns:ai="http://altruists.org" ai:attr="namespaced" />');
+
+$attr= $fromdom->firstChild->attributes->item(0);
+
+$att = $aDOM->importNode($attr);
+
+$aDOM->documentElement->appendChild($aDOM->importNode($attr, true));
+
+echo $aDOM->saveXML();
+
+?>
+--EXPECT--
+<?xml version="1.0"?>
+<f2f:a xmlns:f2f="http://friend2friend.net/" xmlns:ai="http://altruists.org" ai:attr="namespaced"/>
\ No newline at end of file