Bug #55766 [Opn->Bgs]: Incorrect xPath in children nodes
| From: | rrichards@php.net | Date: | Fri, 23 Sep 2011 13:08:05 +0000 |
| Subject: | Bug #55766 [Opn->Bgs]: Incorrect xPath in children nodes | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-163813@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=55766&edit=1
ID: 55766
Updated by: rrichards@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