newnode = xmlNewChild(node, NULL, localname, (xmlChar *)value);
if (nsuri != NULL) {
- nsptr = xmlSearchNsByHref(node->doc, node, (xmlChar *)nsuri);
- if (nsptr == NULL) {
+ if (nsuri_len == 0) {
+ newnode->ns = NULL;
nsptr = xmlNewNs(newnode, (xmlChar *)nsuri, prefix);
+ } else {
+ nsptr = xmlSearchNsByHref(node->doc, node, (xmlChar *)nsuri);
+ if (nsptr == NULL) {
+ nsptr = xmlNewNs(newnode, (xmlChar *)nsuri, prefix);
+ }
+ newnode->ns = nsptr;
}
- newnode->ns = nsptr;
}
_node_as_zval(sxe, newnode, return_value, SXE_ITER_NONE, (char *)localname, prefix, 0 TSRMLS_CC);
--- /dev/null
+--TEST--
+Bug #41947 (addChild incorrectly registers empty strings as namespaces)
+--FILE--
+<?php
+$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?><root xmlns:myns="http://myns" />');
+$grandchild = $xml->addChild('child', null, 'http://myns')->addChild('grandchild', 'hello', '');
+
+$gchild = $xml->xpath("//grandchild");
+if (count($gchild) > 0) {
+ echo $gchild[0];
+}
+?>
+--EXPECT--
+hello