Maison >développement back-end >tutoriel php >Comment supprimer un nœud parent dans SimpleXML à l'aide de XPath ?
Question :
Dans SimpleXML, comment puis-je supprimer un nœud parent associé à un élément spécifique identifié via XPath ?
Description du problème :
L'utilisation du code suivant pour rechercher et supprimer un élément avec un item_id spécifique échoue :
<code class="php">$xml = simplexml_load_file($filename); $data = $xml->xpath('//items/info[item_id="' . $item_id . '"]'); $parent = $data[0]->xpath("parent::*"); unset($parent);</code>
L'instruction unset ($ parent) n'élimine pas le parent
Réponse :
Appeler directement unset() sur une variable d'objet ($parent dans ce cas) supprime uniquement la référence d'objet, pas le nœud lui-même.
Solution utilisant DOMDocument :
<code class="php">$doc = new DOMDOcument; $doc->loadxml(...XML string...); $item_id = 456; $xpath = new DOMXPath($doc); foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) { $node->parentNode->removeChild($node); }</code>
Cette boucle parcourt la correspondance
Sortie :
<code class="xml"><?xml version="1.0"?> <foo> <items> <info> <item_id>123</item_id> </info> </items> <items> <info> <item_id>789</item_id> </info> </items> </foo></code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!