Bonjour,

J'ai dans un XML model ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...