|  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
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
Solve the problem:
41 - 26 = ?
Subscribe to this entry?

 [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: Mon May 20 16:01:35 2024 UTC