Removing nodes in XML with XPath and PHP -


i have xml:

<root>    <level name="main">       <level name="sub_1">          <content id="abc123" />       </level>    </level> </root> 

i search node id abc123 , delete <content> , parent <level>

so end result be:

<root>   <level name="main">   </level>  </root> 

i have tried in php without result, doing wrong?

 $doc = new domdocument;  $doc->loadxml($xml_from_file);   $xpath = new domxpath($doc);  $node_list = $xpath->query("content[@id='abc123']/parent::*");   $node = $node_list->item(0);   $doc->removechild($node); 

here 2 issues source.

the expression match child nodes. need start // match node: //content[@id='abc123']/parent::*.

the found node not child of document so, need remove own parent: $node->parentnode->removechild($node);.

i suggest using foreach avoid problems if node doesn't exists.

$document = new domdocument; $document->loadxml($xmlstring);  $xpath = new domxpath($document);  foreach ($xpath->evaluate("//content[@id='abc123']/parent::*") $node) {   $node->parentnode->removechild($node); }  echo $document->savexml(); 

Comments