|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2011-09-23 13:08 UTC] rrichards@php.net
-Status: Open
+Status: Bogus
[2011-09-23 13:08 UTC] rrichards@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 21 23:00:01 2025 UTC |
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" } }