Edit report at https://bugs.php.net/bug.php?id=55766&edit=1

 ID:                 55766
 Updated by:         rricha...@php.net
 Reported by:        ekazakov at parallels dot com
 Summary:            Incorrect xPath in children nodes
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            SimpleXML related
 Operating System:   CentOS 5
 PHP Version:        5.3.8
 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

Fix your xpath expression not to search entire document


Previous Comments:
------------------------------------------------------------------------
[2011-09-23 05:57:19] ekazakov at parallels dot com

Description:
------------
For children nodes SimpleXMLElement::xpath searches the matching xPath in 
parent 
node.

Workaround:
Create new instances of SimpleXMLElement for each child.
$xmlNode = new SimpleXMLElement($xmlNode->asXML());

Test script:
---------------
$xmlData = <<<XML
<foo>
    <bar>
        <a>first</a>
    </bar>
    <bar>
        <a>second</a>
    </bar>
</foo>
XML;

$xmlObj = new SimpleXMLElement($xmlData);
foreach ($xmlObj->children() as $xmlNode) {
    echo "<br>" . htmlspecialchars($xmlNode->asXML()) . "<br>";
    var_dump($xmlNode->xpath("//a"));
}

Expected result:
----------------
<bar> <a>first</a> </bar>
array(1) { [0]=> object(SimpleXMLElement)#333 (1) { [0]=> string(5) "first" } } 
<bar> <a>second</a> </bar>
array(1) { [0]=> object(SimpleXMLElement)#333 (1) { [0]=> string(6) "second" } }

Actual result:
--------------
<bar> <a>first</a> </bar>
array(2) { [0]=> object(SimpleXMLElement)#333 (1) { [0]=> string(5) "first" } 
[1]=> object(SimpleXMLElement)#335 (1) { [0]=> string(6) "second" } } 
<bar> <a>second</a> </bar>
array(2) { [0]=> object(SimpleXMLElement)#331 (1) { [0]=> string(5) "first" } 
[1]=> object(SimpleXMLElement)#333 (1) { [0]=> string(6) "second" } }


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



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

Reply via email to