Bug #54354 [Asn->Nab]: Can't not inherit parent's namespace (patch)
| From: | rrichards@php.net | 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