Bonsoir !
J'ai un arbre XML comme suit :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <utilisateurs> <user id="1">Jean-michel</user> <user id="2">Pascal</user> <user id="3">Hubert</user> <user id="4">Emilie</user> <user id="5">Samia</user> </utilisateurs>
Ce que je veux, c'est enlever les noeuds enfants. Pour cela j'utilise PHP DOM XML et sa méthode removeChild().
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?php $document = new DOMDocument("1.0", "UTF-8"); $document -> load("cheminVersMonFichier.xml"); $document -> xmlStandalone = true; $document -> preserveWhiteSpace = "false"; $document -> formatOutput = "true"; $unPath = new DOMXPath($document); $cpteUsers = $unPath -> evaluate("count(/utilisateurs/user[@id=' . $idAretirer . '])"); for($i = 0; $i < $cpteUsers; $i++) { $monPath = $unPath -> query("/utilisateurs/user[@id=' . $idAretirer . ']") -> item(0); $getNoeudParent = $monPath -> parentNode; $retraitNoeud = $getNoeudParent -> removeChild(); } $sauvegarde = $document -> save("cheminVersMonFichier.xml"); ?>
Ce code devrait me permettre de retirer tous les enfants du noeud <utilisateurs></utilisateurs>.
Mon problème c'est qu'avec DOM, lors de la suppression, il laisse des tags vides et on ne peut plus appendChild() de nouveaux éléments enfants à l'intérieur sans bug. J'ai fait des recherches, et je suis tombé sur les extentions LIBXML mais je ne sais pas laquelle pourrait, lors d'une suppression, passer le tag de : <utilisateurs></utilisateurs> à <utilisateurs />, le condenser.
Quelle méthode me conseillez vous ? Vous avez des exemples de code ? Vous connaissez cette problématique vous aussi ? Vous avez déjà travaillé avec les LIBXML ?
Je suis preneur de conseils !
Partager