Edit report at https://bugs.php.net/bug.php?id=62639&edit=1
ID: 62639
Comment by: pavel at icewarp dot com
Reported by: alexshock at yandex dot ru
Summary: XML structure broken
Status: Assigned
Type: Bug
Package: SimpleXML related
Operating System: debian 6.0.5
PHP Version: 5.4.5
Assigned To: acurioso
Block user comment: N
Private report: N
New Comment:
So any update? this issue is hanging here for almost two years ? Will you fix it ?
Previous Comments:
------------------------------------------------------------------------
[2014-03-29 20:47:54] knyttl at goout dot cz
Why you develop new features, when the old ones are unusable?
------------------------------------------------------------------------
[2014-02-11 11:33:16] electroglyph at gmail dot com
???
------------------------------------------------------------------------
[2013-12-29 20:34:00] knyttl at goout dot cz
Is there something happening with this issue? It is now in stable debian and others :/
------------------------------------------------------------------------
[2013-08-16 01:59:10] sergey at shymko dot net
The following workaround seems to fix both dumping and type casting:
<?php
class SimpleXMLElement_CloneFix extends SimpleXMLElement
{
public function xpath($path)
{
$result = parent::xpath($path) ?: array();
foreach ($result as $node) {
$this->_fixNode($node);
}
return $result;
}
protected function _fixNode(SimpleXMLElement $node)
{
if (!$node && (string)$node) {
$dom = dom_import_simplexml($node);
$dom->parentNode->replaceChild(clone $dom, $dom);
}
}
}
Unfortunately, the same approach does not work for children() method, because of mysterious nature
of its returned value.
Despite returned object manifests itself as an instance of SimpleXMLElement, it does not behave as
such.
For instance, it is incompatible with dom_import_simplexml().
So, what kind of SimpleXMLElement is that?
------------------------------------------------------------------------
[2013-06-14 00:21:27] info at fuktommy dot com
It causes not only wrong var_dump and print_r, but also wrong boolean cast.
Test script:
------------
$xml = <<<XML
<?xml version="1.0"?>
<a>
<b>Some String</b>
</a>
XML;
$b = simplexml_load_string($xml)->xpath('/a/b');
var_dump((string)$b[0]);
var_dump((bool)$b[0]);
Expected result:
----------------
string(11) "Some String"
bool(true)
Actual result:
--------------
string(11) "Some String"
bool(false)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=62639--
Edit this bug report at https://bugs.php.net/bug.php?id=62639&edit=1