php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #55766 Incorrect xPath in children nodes
Submitted: 2011-09-23 05:57 UTC Modified: 2011-09-23 13:08 UTC
From: ekazakov at parallels dot com Assigned:
Status: Not a bug Package: SimpleXML related
PHP Version: 5.3.8 OS: CentOS 5
Private report: No CVE-ID: None
 [2011-09-23 05:57 UTC] 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" } }

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-09-23 13:08 UTC] rrichards@php.net
-Status: Open +Status: Bogus
 [2011-09-23 13:08 UTC] rrichards@php.net
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
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 13:01:31 2024 UTC