ID:          41861
 Updated by:  [EMAIL PROTECTED]
 Reported By: hubert dot roksor at gmail dot com
-Status:      Open
+Status:      Assigned
 Bug Type:    SimpleXML related
 PHP Version: 5CVS-2007-06-30 (CVS)
-Assigned To: 
+Assigned To: rrichards


Previous Comments:
------------------------------------------------------------------------

[2007-06-30 17:12:02] hubert dot roksor at gmail dot com

Description:
------------
In addition to a node's own namespaces, getNamespaces() seems to return
the namespaces of its latter siblings.

In the reproduce code below, we create a tree composed of 5 nodes: the
first and last nodes have no namespaces and the 3 nodes in-between each
have their own namespace. We observe that getNamespaces() returns all 3
namespaces for the first node, altough it should have none, then 3, 2, 1
namespaces for the subsequent nodes (which should only have one each)
then finally no namespace for the last node, as expected.

children(), on the other hand, behaves correctly and does not find the
nodes under those "extra" namespaces so I guess the problem is located
in getNamespaces().

Thanks for reading :]


Tested on:

PHP 5.2.4-dev (cli) (built: Jun 30 2007 12:04:20)
WinXP
libxml2 2.6.26
SimpleXML Revision: 1.151.2.22.2.29

PHP 5.2.2-pl1-gentoo (cli) (built: May 24 2007 00:26:35)
libxml 2.6.27
SimpleXML Revision: 1.151.2.22.2.26

Reproduce code:
---------------
$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8" ?>
<root>
        <first_node_no_ns />
        <ns1:node1 xmlns:ns1="#ns1" />
        <ns2:node2 xmlns:ns2="#ns2" />
        <ns3:node3 xmlns:ns3="#ns3" />
        <last_node_no_ns />
</root>');

foreach (array(null, '#ns1', '#ns2', '#ns3') as $ns)
{
        foreach ($xml->children($ns) as $child)
        {
                $name = $child->getName();
                $namespaces = $child->getNamespaces(false);

                echo "children($ns) has found '$name' -- Its namespaces: ",
implode(', ', $namespaces), "\n";
        }
}

Expected result:
----------------
children() has found 'first_node_no_ns' -- Its namespaces: #ns1, #ns2,
#ns3
children() has found 'last_node_no_ns' -- Its namespaces:
children(#ns1) has found 'node1' -- Its namespaces: #ns1, #ns2, #ns3
children(#ns2) has found 'node2' -- Its namespaces: #ns2, #ns3
children(#ns3) has found 'node3' -- Its namespaces: #ns3

Actual result:
--------------
children() has found 'first_node_no_ns' -- Its namespaces:
children() has found 'last_node_no_ns' -- Its namespaces:
children(#ns1) has found 'node1' -- Its namespaces: #ns1
children(#ns2) has found 'node2' -- Its namespaces: #ns2
children(#ns3) has found 'node3' -- Its namespaces: #ns3


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=41861&edit=1

Reply via email to