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

Langage Perl Discussion :

Supprimer un Node avec XML::Twig


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Supprimer un Node avec XML::Twig
    Bonjour tout le monde, ma question est simple mais elle me casse la tête depuis un bon moment. J'utilise XML::Twig dans mon parsing XML et je veux tout simplement supprimer un nœud XML après l'avoir identifier j'utilise la fonction delete de cette bibliothèque. Voilà le code que j'utilise:

    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
    16
    17
    18
    19
     
     
    my @ParameterNodes = $twig_notoyage->get_xpath("//Parameters/Parameter");
    foreach my $parameter(@ParameterNodes)
    {
    	my $UsefullParam = "FALSE";
    	my $ParamShortName = $parameter->att('ShortName');
    	for (my $ind = 0; $ind < scalar(@ecran_tab) ; $ind++)
    	{
    		if($ParamShortName eq $ecran_tab[$ind])
    		{
    			$UsefullParam = "TRUE";
    		}
    	}
    	if ($UsefullParam eq "FALSE")
    	{
    		$parameter->delete();
    	}
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Et quelle est la question?

    Peut-être que ça ne marche pas, mais tu ne nous dis rien. Et si ça ne marche pas, que se passe-t-il? Le script ne compile pas? Tu as un warning ou un message d'erreur? Ou ça à l'air de marcher et ça ne fait rien? On ne peut pas trop deviner si tu ne dis pas...

    Bref, donne des précisions, cela nous aidera sans doute à t'aider.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Il n'y a pas de warning ou un message d'erreur le code tourne correctement. J'ai même testé si j'arrive à accéder au dernier bloc de if qui permet de supprimer le nœud XML avec un affichage sur la console, l'affichage s’effectue correctement.
    Le problème vient visiblement de l'instruction $parameter->delete(); qui ne me donne pas mon résultat souhaité.

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le problème vient visiblement de l'instruction $parameter->delete(); qui ne me donne pas mon résultat souhaité.
    Et quel est ce résultat ? Veux-tu dire que delete() ne supprime pas le nœud dans l'arbre en mémoire ? Il est encore présent lorsque tu l'imprimes avec ->print() à la fin du programme ? Ou croyais-tu que ce delete() allait modifier le fichier d'origine ?

    Au fait, ton code est vraiment mauvais (en particulier le 'TRUE' et 'FALSE'... utiliser des chaînes de caractères comme booléens est une très mauvaise habitude), tu pourrais faire mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    my %ecran_tab_keys = map { $_ => 1 } @ecran_tab;
     
    my @ParameterNodes = $twig_notoyage->get_xpath("//Parameters/Parameter");
    foreach my $parameter (@ParameterNodes) {
    	if ( not exists $ecran_tab_keys{$parameter->att('ShortName')} ) {
    		$parameter->delete();
    	}
    }
     
    # ...
     
    $twig_notoyage->print(); # les noeuds supprimés apparaissent-il dans la sortie ?
    --
    Jedaï

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Je ne connais pas du tout XML:Twig mais en tapant rapidement "delete xml node perl" dans google, il semble qu'il ne faut pas utiliser delete mais splice (même si les exemples trouvés sont pour XML:SMART et XML:Simple ça doit être semblable)

    http://www.codingforums.com/perl-cgi...node-perl.html

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/02/2014, 11h07
  2. Réponses: 2
    Dernier message: 10/08/2012, 13h47
  3. xml:supprimer un noeud avec dom
    Par awalter1 dans le forum Général Python
    Réponses: 1
    Dernier message: 27/10/2010, 15h01
  4. [XML] ajout/suppression d'un node avec xml::xyz
    Par LFC dans le forum Modules
    Réponses: 2
    Dernier message: 11/07/2007, 20h25
  5. Tree View avec XML et XSL
    Par Drooxy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/04/2003, 10h21

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