PHP SimpleXML - Supprimer le noeud xpath
Je suis un peu confus quant à la façon dont je peux supprimer un nœud parent de quelque chose que je peux trouver via une recherche xpath:
$xml = simplexml_load_file($filename);
$data = $xml->xpath('//items/info[item_id="' . $item_id . '"]');
$parent = $data[0]->xpath("parent::*");
unset($parent);
Donc, il trouve l'id de l'élément, pas de problèmes là - mais la unset n'est pas de se débarrasser de cette <items>
nœud. Tout ce que je veux faire est de retirer le <items>...</items>
pour ce produit. Évidemment, il ya des charges de <items>
nœuds dans le fichier xml, donc il ne peux pas faire de unset($xml->data->items)
comme supprimer tout.
Toutes les idées beaucoup apprécié 🙂
source d'informationauteur Peter John
Vous devez vous connecter pour publier un commentaire.
cela fonctionne comme prévu (suppression de l' </b> élément fromt il document) parce que le __unset() la méthode (ou l'équivalent dans les modules de code) est appelée.
Mais lorsque vous appelez
unset($parent);
il ne supprime la référence de l'objet stocké dans $parent, mais cela n'affecte pas l'objet lui-même ou le document stocké dans $xml.J'aimerais revenir à DOMDocument pour cela.
imprime
Ça marche comme ça pour moi. Pas
unset($parent);
maisunset($parent[0]);
:Cela passe par la création d'un auto-référence à la simplexml-élément dans
$parent
(ou$res[0]
).Pour une explication plus détaillée, veuillez consulter une réponse similaire dans la question relative à la Retirer un enfant avec un attribut spécifique, dans SimpleXML PHP.
Une façon est d'importer le SimpleXML nœud dans DOMDocument et ensuite supprimer dans DOMDocument. Pas vraiment simple, mais il fonctionne:
Je serais sûrement à l'approche de ce problème comme un filtrage d'un pas un retrait.
Ainsi, la copie nécessaire nœuds dans une autre chaîne ou construire un autre document XML. Vous savez quels sont les outils que vous utilisez pour de tels scénarios.
Je pense que ce n'est pas seulement de résoudre votre problème, mais probablement maintient votre plus facile à lire et à comprendre. Pas sûr que sur les performances. Dites-nous combien de nœuds, vous travaillez régulièrement avec.