<?php
$xml = new SimpleXMLElement('<a><b/></a>');
unset($xml->b);
echo $xml->asxml();
this works as intended (removing the <b/> element fromt he document) because the __unset() method (or the equivalent in the modules code) is called.
But when you call unset($parent);
it only removes the object reference stored in $parent, but it doesn’t affect the object itself or the document stored in $xml.
I’d revert to DOMDocument for this.
<?php
$doc = new DOMDOcument;
$doc->loadxml('<foo>
<items>
<info>
<item_id>123</item_id>
</info>
</items>
<items>
<info>
<item_id>456</item_id>
</info>
</items>
<items>
<info>
<item_id>789</item_id>
</info>
</items>
</foo>');
$item_id = 456;
$xpath = new DOMXpath($doc);
foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) {
$node->parentNode->removeChild($node);
}
echo $doc->savexml();
prints
<?xml version="1.0"?>
<foo>
<items>
<info>
<item_id>123</item_id>
</info>
</items>
<items>
<info>
<item_id>789</item_id>
</info>
</items>
</foo>