ID:               44066
 Updated by:       [EMAIL PROTECTED]
 Reported By:      freddie at witherden dot org
-Status:           Open
+Status:           Bogus
 Bug Type:         SimpleXML related
 Operating System: OS X
 PHP Version:      5.2.5
 New Comment:

For functionality like that you would need to import the nodes from the

xpath output into DOM and use its capabilities to get the parent and 
then remove the child.


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

[2008-02-10 10:48:10] freddie at witherden dot org

> can you provide an example where removing using offsets doesn't work

(i.e. unset($xml->test[0]);)?

I have just tried to replicate this, but alas, cannot. Sorry about
that.

> Calling unset in your prev example just unsets the variable.

That functionality makes it very hard to unset the results of an xpath

query. This is because one just has an array of nodes, making unsetting

them extremely difficult.

------------------------------------------------------------------------

[2008-02-10 07:01:15] [EMAIL PROTECTED]

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]);)

------------------------------------------------------------------------

[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

Reply via email to