ID:               44066
 User updated by:  freddie at witherden dot org
 Reported By:      freddie at witherden dot org
-Status:           Feedback
+Status:           Open
 Bug Type:         SimpleXML related
 Operating System: OS X
 PHP Version:      5.2.5
 New Comment:

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.


Previous Comments:
------------------------------------------------------------------------

[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

Reply via email to