PHP - Supprimer un Élément XML
J'ai besoin de supprimer des éléments d'un fichier XML à l'aide de PHP. Il sera fait via ajax et j'ai besoin de trouver l'élément XML via un attribut.
C'est mon fichier XML
<?xml version="1.0" encoding="utf-8"?>
<messages>
<message time="1248083538">
<name>Ben</name>
<email>Ben's Email</email>
<msg>Bens message</msg>
</message>
<message time="1248083838">
<name>John Smith</name>
<email>[email protected]</email>
<msg>Can you do this for me?</msg>
</message>
</messages>
Donc ce que je voudrais dire, c'est quelque chose comme supprimer l'élément où le temps est égal à 1248083838.
Ive été en utilisant XML Simple, jusqu'à maintenant, et j'ai juste compris qu'il peut tout faire sauf de supprimer des éléments.
Alors, comment puis-je faire?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le DOM classes en PHP. ( http://us3.php.net/manual/en/intro.dom.php ).
Vous aurez besoin de lire le document XML en mémoire, utilisez les classes DOM faire la manipulation, et puis vous pouvez enregistrer le document XML comme nécessaire (http ou dans un fichier).
DOMNode est un objet qui a supprimer des fonctionnalités (pour répondre à votre question).
C'est un peu plus compliqué que SimpleXML, mais une fois que vous vous habituez à elle, il est beaucoup plus puissant
(semi-prises à partir d'un exemple de code à php.net)
Cela devrait vous donner un peu une idée sur comment faire pour supprimer l'élément. Il permet d'imprimer le XML sans nœud. Si vous voulais l'envoyer dans un fichier, il suffit d'écrire la chaîne de caractères dans un fichier.
Dave Morgan est correcte dans les DOM les classes sont de plus en plus puissants, mais dans le cas où vous voulez coller avec SimpleXML, essayez d'utiliser la fonction unset() de la fonction sur n'importe quel nœud. E. g. unset($simpleXMLDoc->node1->enfant1), et qui sera supprimé à partir du XML.
Jetez un oeil à
Même si SimpleXML n'ont pas une manière détaillée, pour supprimer des éléments, vous peut supprimer des éléments de SimpleXML en utilisant PHP
unset()
. La clé pour cela est la gestion de cibler l'élément souhaité. Au moins une façon de faire le ciblage est l'aide de l'ordre des éléments. D'abord trouver le numéro de commande de l'élément que vous voulez supprimer (par exemple avec une boucle), puis retirez l'élément:Vous pouvez même supprimer plusieurs éléments avec cette, en stockant le numéro de commande de la cible éléments dans un tableau. N'oubliez pas de faire le retrait dans l'ordre inverse (
array_reverse($targets)
), car la suppression d'un élément réduit naturellement le numéro de commande des articles qui viennent après lui.Certes, c'est un peu un hackaround, mais il semble bien fonctionner.