ID: 44066
Updated by: [EMAIL PROTECTED]
Reported By: freddie at witherden dot org
-Status: Open
+Status: Feedback
Bug Type: SimpleXML related
Operating System: OS X
PHP Version: 5.2.5
New Comment:
can you provide an example where removing using offsets doesn't work
(i.e. unset($xml->test[0]);)? The other things you mentioned are
expected behavior.
Calling unset in your prev example just unsets the variable. You must
call unset on a member of an SimpleXMLElement in order to remove it
(i.e. unset($sXML->test[1]);)
Previous Comments:
------------------------------------------------------------------------
[2008-02-09 19:26:38] freddie at witherden dot org
Here is the problem with XPath:
<?php
$xml = <<<XML
<?xml version='1.0'?>
<document>
<test>foo</test>
<test>bar</test>
<test>baz</test>
</document>
XML;
$sXML = simplexml_load_string($xml);
$arr = $sXML->xpath('/document/test');
foreach ($sXML->xpath('/document/test') as $element)
unset($element);
echo $sXML->asXML();
?>
Expected is that there are no <test> nodes, actual is that the
document is unchanged. Yet, in the foreach loop if I add
$element['attr'] = 'Attribute'; (so replacing the unset line) the
document is modified (all of the <test> nodes have <test
attr="Attribute">...</test>).
So I can modify xpath results yet I can not unset them, The same
applies to foreach ($sXML->test as $element), one can change but not
unset.
------------------------------------------------------------------------
[2008-02-07 00:33:44] [EMAIL PROTECTED]
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
------------------------------------------------------------------------
[2008-02-06 23:28:11] freddie at witherden dot org
Description:
------------
Calling unset on a SimpleXMLElement is inconsistent. Assuming $xml is a
SimpleXMLElement and test is an 'array'. unset($xml->test); works, yet
unset($xml->test[0]); (or any number does not). Elements returned from
xpath queries can also not be unset.
unset should work on all SimpleXMLElements, irrespective of where in a
document they reside/how they were acquired. Failing this behaviour it
would seem logical to generate a warning in the instance where one
tries
to unset an element which can not be unset.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=44066&edit=1