Maison >développement back-end >tutoriel php >Comment supprimer un nœud parent dans SimpleXML à l'aide de XPath ?

Comment supprimer un nœud parent dans SimpleXML à l'aide de XPath ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 12:56:29223parcourir

How to Remove a Parent Node in SimpleXML Using XPath?

SimpleXML - Suppression de nœuds 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 node.

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 nœuds, supprime le nœud parent et met à jour l'objet $doc.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn