|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #54354 Can't not inherit parent's namespace (patch)
Submitted: 2011-03-23 05:58 UTC Modified: 2014-07-03 06:58 UTC
Avg. Score:4.0 ± 0.0
Reproduced:3 of 3 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: tom at samplonius dot org Assigned: rrichards (profile)
Status: Not a bug Package: SimpleXML related
PHP Version: 5.3.6 OS: CentOS 4
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: tom at samplonius dot org
New email:
PHP Version: OS:


 [2011-03-23 05:58 UTC] tom at samplonius dot org
There are two issues:
(1) If you addChild(), the new child always inherits the namespace of the parent.  It is currently impossible to add children with no namespace, to a parent with a namespace.  Though looking at the code, it is clear that is intent to distinguish between a NULL namespace value and a blank namespace value.  I believe the design intent was that NULL means inherit the parent's namespace, and '' means that no namespace should be used.  The attached patch does this.

(2) If you specify a namespace of "", addChild() will actually add an attribute of " xmlns="" ", which is not valid.

Patch is attached.  If the $namespace parameter is "", no namespace is used, which fixes both issues.

Test script:
header('Content-Type: text/plain');

$r = new SimpleXMLElement('<r />');
$c1 = $r->addChild('ns1:child1', NULL, 'urn:myspace1');
echo $r->asXML(), "\n";

$r = new SimpleXMLElement('<r />');
$r->addChild('Thing1', 100, '');
echo $r->asXML(), "\n";

Expected result:
<?xml version="1.0"?>
<r><ns1:child1 xmlns:ns1="urn:myspace1"><ns1:child2/></ns1:child1></r>

<?xml version="1.0"?>

Actual result:
<?xml version="1.0"?>
<r><ns1:child1 xmlns:ns1="urn:myspace1"><ns1:child2/></ns1:child1></r>

<?xml version="1.0"?>
<r><Thing1 xmlns="">100</Thing1></r>


simplexml.c.patch (last revision 2011-04-26 23:07 UTC by tom at samplonius dot org)

Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2011-03-24 22:54 UTC]
-Status: Open +Status: Assigned -Assigned To: +Assigned To: rrichards
 [2014-07-01 14:55 UTC] giacomo at boticca dot com
This is a tiny patch that makes a lot of sense, but it's been sitting there for more than 3 years.
Should it be a pull request instead of a patch now?
 [2014-07-03 06:58 UTC]
-Status: Assigned +Status: Not a bug
 [2014-07-03 06:58 UTC]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at and the instructions on how to report
a bug at

Didn't notice this was open. Works as expected
xmlns="" is valid and means no default namespace. It is explicitly added to insure that no namespace be attached to the new child. Your patch actually breaks behavior and creates invalid (or at least not correct) XML. i.e.

$r = simplexml_load_string('<r xmlns="urn:myspace1" />');
$r->addChild('Thing1', 100, '');
echo $r->asXML(), "\n";

without patch (correct output):
<?xml version="1.0"?>
<r xmlns="urn:myspace1"><Thing1 xmlns="">100</Thing1></r>

with patch (incorrect as child maintains default namespace although explicitly told not to)
<?xml version="1.0"?>
<r xmlns="urn:myspace1"><Thing1>100</Thing1></r>
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun May 26 07:01:30 2024 UTC