Bug #54354 [Asn->Nab]: Can't not inherit parent's namespace (patch)

From: Date: Thu, 03 Jul 2014 06:58:03 +0000
Subject: Bug #54354 [Asn->Nab]: Can't not inherit parent's namespace (patch)
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-186439@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=54354&edit=1 ID: 54354 Updated by: rrichards@php.net Reported by: tom at samplonius dot org Summary: Can't not inherit parent's namespace (patch) -Status: Assigned +Status: Not a bug Type: Bug Package: SimpleXML related Operating System: CentOS 4 PHP Version: 5.3.6 Assigned To: rrichards Block user comment: N Private report: N New Comment: Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php 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> Previous Comments: ------------------------------------------------------------------------ [2014-07-01 14:55:03] 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? ------------------------------------------------------------------------ [2011-03-23 05:58:18] tom at samplonius dot org Description: ------------ 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: --------------- <?php header('Content-Type: text/plain'); $r = new SimpleXMLElement('<r />'); $c1 = $r->addChild('ns1:child1', NULL, 'urn:myspace1'); $c1->addChild('child2'); 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"?> <r><Thing1>100</Thing1></r> 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> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=54354&edit=1

« previous php.bugs (#186439) next »