IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

[XML] Comment supprimer un noeud


Sujet :

Modules Perl

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Février 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 46
    Points : 67
    Points
    67
    Par défaut [XML] Comment supprimer un noeud
    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...

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Février 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Salut,

    Finalement, j'ai trouvé la réponse...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach my $empty ( $root->xql("//files[count(*)=0]") ) {
      $empty->getParentNode()->removeChild($empty);
    }
    Cette requête XPATH ( "//files[count(*)=0]" ) retourne tous les balises FILES ne contenant aucune balise.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XML] Comment détecter un noeud vide ?
    Par lnplnp dans le forum Modules
    Réponses: 1
    Dernier message: 31/03/2008, 18h47
  2. [XML DOM]Supprimer plusieurs noeud
    Par Shandler dans le forum APIs
    Réponses: 9
    Dernier message: 06/06/2007, 20h30
  3. [DOM] PHP5 et XML comment ajouter un noeud dans un noeud précis?
    Par titou250 dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 20/04/2006, 22h02
  4. Réponses: 6
    Dernier message: 06/03/2006, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo