[XML] Comment supprimer un noeud
Bonjour,
J'ai dans un XML model ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<root>
<tache1>
<files>
<file path="" log=""/>
</files>
</tache1>
<tache2>
<files>
<file path="" log=""/>
</files>
</tache2>
</root> |
Grâce à un script PERL, je dois compléter la balise FILES avec d'autres FILE (référence à des fichiers à traiter).
Une fois les ajouts de FILE faits, j'efface la première balise '<file path="" log=""/>' qui ne sert que pour le modèle en fait.
Il y a des cas où certaines tâches ne doivent pas comporter la balise FILES. On ne le sait que si FILES ne comporte plus de balise FILE.
J'ai donc écrit ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
foreach my $empty ( $root->xql('/root/*/files/file[@path=""]') ) {
$empty->getParentNode()->removeChild($empty);
}
foreach my $empty ( $root->xql('/root/*/files') ) {
print STDERR $empty->toString() . "\n";
if ( $empty->hasChildNodes() == 0 ){
$empty->getParentNode()->removeChild($empty);
}
elsif ( $empty->hasChildNodes() == 1 ){
print STDERR $empty->toString() . "\n";
}
} |
Or le "foreach" qui supprime les balises 'FILE' laisse :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<root>
<tache1>
<files>
</files>
</tache1>
<tache2>
<files>
<file path="c:\az\er\rt\ty\yu1.log" log="azerty"/>
<file path="c:\az\er\rt\ty\yu2.log" log="azerty"/>
</files>
</tache2>
</root> |
et le blanc qu'il y a dans la balise FILES de TACHE1 fait qu'il ne passe jamais dans
Code:
1 2 3 4
|
if ( $empty->hasChildNodes() == 0 ){
$empty->getParentNode()->removeChild($empty);
} |
La question est donc :
Comment supprimer la balise FILES de TACHE1 ? ? ?
Merci d'avance pour l'aide...