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 :

Parsing xml pour retomber sur du xml


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut Parsing xml pour retomber sur du xml
    J'ai un fichier xml je dois via un script ouvrir, récupérer quelques infos de certaines balises et réécrire le même fichier en sortie en changeant juste 2 3 balises selon les informations que j'aurais récupéré. Comment parcourir mon xml pour récupérer le contenu de certaines balises et modifier en fin de compte le contenu de certaines balises de ce même fichier en entrée?

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Bonjour,

    Premièrement, merci de respecter la ponctuation lorsque vous écrivez, sinon, il est difficile de vous suivre.

    Pour analyser un fichier XML, le module XML::Twig est une valeur sûre. Néanmoins, pour vous aider, il serait intéressant d'avoir un exemple de fichier XML.

    Sinon, le principe est le suivant :

    • j'analyse mon fichier XML avec Twig ;
    • effectue les modifications en mémoire si la RAM le permet ;
    • génère un nouveau fichier (généralement temporaire) ;
    • puis renomme ce fichier en mon fichier original.


    Voilà !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Voilà un exemple de fichier :

    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
        <version>2</version>
        <compte>courant</compte>
        <mouvement>aucun</mouvement>
        <emetteur>banque</emetteur>
        <destinataire>client</client>
        <domiciliation>
            <nom>Banque Populaire</nom>
            <adresse>4 rue du bucheron, Cannes</adresse>
            <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
        </domiciliation>
        <virement>
            <automatique>SFR</automatique>
            <jour_prelevement>le 05 du mois</jour_prelevement>
        </virement>
    </PFP>

    Citation Envoyé par djibril Voir le message
    Bonjour,

    Premièrement, merci de respecter la ponctuation lorsque vous écrivez, sinon, il est difficile de vous suivre.

    Pour analyser un fichier XML, le module XML::Twig est une valeur sûre. Néanmoins, pour vous aider, il serait intéressant d'avoir un exemple de fichier XML.

    Sinon, le principe est le suivant :

    • j'analyse mon fichier XML avec Twig ;
    • effectue les modifications en mémoire si la RAM le permet ;
    • génère un nouveau fichier (généralement temporaire) ;
    • puis renomme ce fichier en mon fichier original.


    Voilà !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Lorsque le fichier xml est parsé,

    si le nom de la banque est la banque populaire alors on change la donnée dans la balise "émetteur". Si le virement automatique est égal à SFR, on change le destinataire en mettant "client SFR" au lieu de "client". Le reste du fichier reste inchangé. Au final nous aurons un fichier comme suit :


    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
        <version>2</version>
        <compte>courant</compte>
        <mouvement>aucun</mouvement>
        <emetteur>Banque Populaire</emetteur>
        <destinataire>client SFR</client>
        <domiciliation>
            <nom>Banque Populaire</nom>
            <adresse>4 rue du bucheron, Cannes</adresse>
            <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
        </domiciliation>
        <virement>
            <automatique>SFR</automatique>
            <jour_prelevement>le 05 du mois</jour_prelevement>
        </virement>
    </PFP>
    Le fichier final devra avoir comme extension ".modifié"


    Citation Envoyé par djibril Voir le message
    Bonjour,

    Premièrement, merci de respecter la ponctuation lorsque vous écrivez, sinon, il est difficile de vous suivre.

    Pour analyser un fichier XML, le module XML::Twig est une valeur sûre. Néanmoins, pour vous aider, il serait intéressant d'avoir un exemple de fichier XML.

    Sinon, le principe est le suivant :

    • j'analyse mon fichier XML avec Twig ;
    • effectue les modifications en mémoire si la RAM le permet ;
    • génère un nouveau fichier (généralement temporaire) ;
    • puis renomme ce fichier en mon fichier original.


    Voilà !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Bonjour, Djibril.
    J'ai à peu près compris comment fonctionnait l'XML Twig et il y'a quelque chose qui m'embête un peu. Dans le script "ParseurXMLTwigDom.pl" , vous réécrivez votre fichier texte en parcourant le fichier xml ligne par ligne. Dans le script "Twig xml A la twig intelligent", vous charger le stricte nécessaire. Ce que j'aimerais c'est écrire dans mon fichier de sortie les balises que j'ai chargé et traité mais aussi les autres balises qui n'ont pas été modifiées. Je cherche à éviter de faire un print de chaque balise qui n'a pas été chargé. Quelqu'un aurait une idée?

    Citation Envoyé par djibril Voir le message
    Bonjour,

    Premièrement, merci de respecter la ponctuation lorsque vous écrivez, sinon, il est difficile de vous suivre.

    Pour analyser un fichier XML, le module XML::Twig est une valeur sûre. Néanmoins, pour vous aider, il serait intéressant d'avoir un exemple de fichier XML.

    Sinon, le principe est le suivant :

    • j'analyse mon fichier XML avec Twig ;
    • effectue les modifications en mémoire si la RAM le permet ;
    • génère un nouveau fichier (généralement temporaire) ;
    • puis renomme ce fichier en mon fichier original.


    Voilà !

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    C'est très simple à effectuer. Voici un exemple de programme qui change toutes les balises compte de ton XML et le fichier final est un fichier avec l'extension .modifie

    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
    20
    21
    22
    23
    24
    25
    26
    #!/usr/bin/perl
    use Carp;
    use strict;
    use warnings;
    use XML::Twig;
     
    my $twig = XML::Twig->new(
      pretty_print => 'indented',
      Twig_handlers => {
        'compte' => \&modifier_comptes,
      },
    );
    $twig->parsefile( 'TOTO.xml'); 
    open my $fh, '>', 'TOTO.modifie';
    $twig->print($fh);
    close $fh;
     
    sub modifier_comptes {
      my ( $twig, $twig_compte ) = @_;
     
      my $nom_compte = $twig_compte->text;
      # Modification
      $twig_compte->set_text( $nom_compte . ' -modifie' );
      $twig_compte->set_att( login => 'flas21' );
      return;
    }
    Fichier TOTO.xml
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
        <version>2</version>
        <compte>courant</compte>
        <mouvement>aucun</mouvement>
        <emetteur>banque</emetteur>
        <destinataire>client</destinataire>
        <domiciliation>
            <nom>Banque Populaire</nom>
            <adresse>4 rue du bucheron, Cannes</adresse>
            <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
        </domiciliation>
        <virement>
            <automatique>SFR</automatique>
            <jour_prelevement>le 05 du mois</jour_prelevement>
        </virement>
    </PFP>

    Fichier TOTO.modifie
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
      <version>2</version>
      <compte login="flas21">courant -modifie</compte>
      <mouvement>aucun</mouvement>
      <emetteur>banque</emetteur>
      <destinataire>client</destinataire>
      <domiciliation>
        <nom>Banque Populaire</nom>
        <adresse>4 rue du bucheron, Cannes</adresse>
        <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
      </domiciliation>
      <virement>
        <automatique>SFR</automatique>
        <jour_prelevement>le 05 du mois</jour_prelevement>
      </virement>
    </PFP>

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Cet exemple de code fonctionne bien, merci pour l'aide apportée. Cependant j'ai encore un petit problème. Disons que ce que je veux modifier se trouve dans la balise "nom" qui se trouve dans la balise "domiciliation". En adaptant votre script un peu, tout le contenu de la balise domiciliation est effacé. Je me retrouve du coup avec : <domiciliation>valeur modifiée</domiciliation>. Je perds les balises à l'intérieur de domiciliation. Je ne comprends pas ce qui cloche, pourtant je ne modifie que la balise nom.

    Citation Envoyé par djibril Voir le message
    C'est très simple à effectuer. Voici un exemple de programme qui change toutes les balises compte de ton XML et le fichier final est un fichier avec l'extension .modifie

    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
    20
    21
    22
    23
    24
    25
    26
    #!/usr/bin/perl
    use Carp;
    use strict;
    use warnings;
    use XML::Twig;
     
    my $twig = XML::Twig->new(
      pretty_print => 'indented',
      Twig_handlers => {
        'compte' => \&modifier_comptes,
      },
    );
    $twig->parsefile( 'TOTO.xml'); 
    open my $fh, '>', 'TOTO.modifie';
    $twig->print($fh);
    close $fh;
     
    sub modifier_comptes {
      my ( $twig, $twig_compte ) = @_;
     
      my $nom_compte = $twig_compte->text;
      # Modification
      $twig_compte->set_text( $nom_compte . ' -modifie' );
      $twig_compte->set_att( login => 'flas21' );
      return;
    }
    Fichier TOTO.xml
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
        <version>2</version>
        <compte>courant</compte>
        <mouvement>aucun</mouvement>
        <emetteur>banque</emetteur>
        <destinataire>client</destinataire>
        <domiciliation>
            <nom>Banque Populaire</nom>
            <adresse>4 rue du bucheron, Cannes</adresse>
            <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
        </domiciliation>
        <virement>
            <automatique>SFR</automatique>
            <jour_prelevement>le 05 du mois</jour_prelevement>
        </virement>
    </PFP>

    Fichier TOTO.modifie
    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
      <version>2</version>
      <compte login="flas21">courant -modifie</compte>
      <mouvement>aucun</mouvement>
      <emetteur>banque</emetteur>
      <destinataire>client</destinataire>
      <domiciliation>
        <nom>Banque Populaire</nom>
        <adresse>4 rue du bucheron, Cannes</adresse>
        <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
      </domiciliation>
      <virement>
        <automatique>SFR</automatique>
        <jour_prelevement>le 05 du mois</jour_prelevement>
      </virement>
    </PFP>

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Montre ton programme.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    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
    20
    21
    22
    23
    24
    25
    26
    #!/usr/bin/perl
    use Carp;
    use strict;
    use warnings;
    use XML::Twig;
     
    my $twig = XML::Twig->new(
      pretty_print => 'indented',
      Twig_handlers => {
        'domiciliation' => \&modifier_comptes,
      },
    );
    $twig->parsefile( 'TOTO.xml'); 
    open my $fh, '>', 'TOTO.modifie';
    $twig->print($fh);
    close $fh;
     
    sub modifier_comptes {
      my ( $twig, $twig_compte ) = @_;
     
      my $nom_compte = $twig_compte->field('nom');
      # Modification
      $twig_compte->set_text( $nom_compte . ' -modifie' );
      $twig_compte->set_att( login => 'flas21' );
      return;
    }


    Citation Envoyé par djibril Voir le message
    Montre ton programme.

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Je t'ai demandé le code que tu as toi réalisé et non le mien

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Je suis parti de ce que tu m'as proposé et j'ai viré ce que je faisais avant de demander de l'aide sur le forum.

    Citation Envoyé par djibril Voir le message
    Je t'ai demandé le code que tu as toi réalisé et non le mien

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Citation Envoyé par flash21 Voir le message
    En adaptant votre script un peu, tout le contenu de la balise domiciliation est effacé. Je me retrouve du coup avec : <domiciliation>valeur modifiée</domiciliation>.
    Qu'as-tu fais pour avoir ça ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Le script que j'ai envoyé hier soir n'est pas exactement le même que celui que tu m'avais envoyé. Il y'a une différence vers la fin. C'est celui là qui donne le résultat dont tu demandes l'origine.


    Citation Envoyé par djibril Voir le message
    Qu'as-tu fais pour avoir ça ?

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Ok, je n'avais pas fait gaffe.
    1) Lorsque tu réponds à un message, clique sur le bouton et non sur qui ne doit être utilisé qu'en cas de réel besoin. Car à force, ça alourdit les message inutilement.
    Merci

    2) Pour revenir à ton souci, ton problème provient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Twig_handlers => {
        'domiciliation' => \&modifier_comptes,
      },
    Tu demandes à twig d'appeler la procédure sur la balise domiciliation. Ainsi, lorsque que twig lit cette balise, il effectue le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      my $nom_compte = $twig_compte->field('nom');
      # Modification
      $twig_compte->set_text( $nom_compte . ' -modifie' );
      $twig_compte->set_att( login => 'flas21' );
    Donc, le contenu de la balise est modifié via set_text, d'où la suppression de tout ce qu'il y avait dedans. Grâce à set_att, un nouvel attribut est rajouté.

    Si tu veux modifier le contenu de la balise nom, écrit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Twig_handlers => {
        'nom' => \&modifier_comptes,
      },
    ainsi toutes les balises nom seront modifiées. Si tu ne souhaites modifier que les balises nom contenu dans les balises domiciliation, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Twig_handlers => {
        'domiciliation/nom' => \&modifier_comptes,
      },

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    toujours dans mon problème avec le fichier xml, je suis confronté à un problème dont ou j'ai du mal à voir venir la solution. Vous comprendrez mieux avec un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sub fonction1
    {
          print "Bonjour comment vous allez";
          return;
    }
    &fonction1;
    A l'affichage j'aurais :
    Bonjour comment vous allez
    Bonjour comment vous allez

    Ce que j'aimerais c'est récupérer, c'est par exemple récupérer le nom du compte défini dans la fonction modifier_compte, dans une autre fonction. exemple modifier_compte_2. Après avoir parcouru plusieurs livres, et tutoriels j'ai du mal à faire cela. Je sais que les variables ne sont visibles que dans la fonction, mais quand je fais appel à la fonction modifier_comptes dans modifier_comptes_2, commet récupérer le nom du compte défini dans modifier_comptes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sub modifier_comptes {
      my ( $twig, $twig_compte ) = @_;
     
      my $nom_compte = $twig_compte->field('nom');
      # Modification
      $twig_compte->set_text( $nom_compte . ' -modifie' );
      $twig_compte->set_att( login => 'flas21' );
      return;
    }

  16. #16
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub fonction1 {
      my ($nom) = @_;
          print "Bonjour $nom, comment vous allez ?";
          return;
    }
     
    fonction1("flash21");

  17. #17
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Le problème est plus complexe que ça. Le fait de mettre en paramètre flash21 suppose qu'on connait déjà à qui dire bonjour. Je vais donner un autre exemple plus clair.

    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
    20
    21
    22
    23
    24
    25
    26
    #!/usr/bin/perl
    use Carp;
    use strict;
    use warnings;
    use XML::Twig;
     
    my $twig = XML::Twig->new(
      pretty_print => 'indented',
      Twig_handlers => {
        'domiciliation' => \&modifier_comptes,
      },
    );
    $twig->parsefile( 'TOTO.xml'); 
    open my $fh, '>', 'TOTO.modifie';
    $twig->print($fh);
    close $fh;
     
    sub modifier_comptes {
      my ( $twig, $twig_compte ) = @_;
     
      my $nom_compte = $twig_compte->field('nom');
      # Modification
      $twig_compte->set_text( $nom_compte . ' -modifie' );
      $twig_compte->set_att( login => 'flas21' );
      return;
    }
    J'ai besoin de crée après dans ce script, une autre fonction nommée modifier_compte_2 dans laquelle j'utiliserais le nom du compte que j'aurais pris dans la fonction modifier_comptes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sub modifier_compte
    {
    &modifiercomptes;
    print $nom_compte;
    }
    J'ai comme message d'erreur que je ne peux pas utiliser une variable qui n'est pas déclarée.

  18. #18
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Bon, ce n'est toujours pas clair. Le plus simple est de parler français. Concrètement, tu souhaites faire quoi ? Parllons Français, au lieu de parler Perl.
    Montre un exemple de ton XML et ce que tu veux lire et obtenir.

  19. #19
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Fichier entrée :

    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
        <version>2</version>
        <compte>courant</compte>
        <mouvement>aucun</mouvement>
        <emetteur>banque</emetteur>
        <destinataire>client</destinataire>
        <domiciliation>
            <nomBanque>Banque Populaire</nomBanque>
            <adresse>4 rue du bucheron, Cannes</adresse>
            <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
        </domiciliation>
        <virement>
            <automatique>SFR</automatique>
            <jour_prelevement>le 05 du mois</jour_prelevement>
        </virement>
    </PFP>

    Script :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/perl
    use Carp;
    use strict;
    use warnings;
    use XML::Twig;
     
    my $twig = XML::Twig->new(
      pretty_print => 'indented',
      Twig_handlers => {
        'domiciliation/nomBanque' => \&nombanque,
        'virement/automatique' => \&virement,
      },
    );
    $twig->parsefile( 'TOTO.xml'); 
    open my $fh, '>', 'TOTOmodifie.xml';
    $twig->print($fh);
    close $fh;
     
    sub nombanque {
      my ($twig, $twig_NomBanque) = @_;
      my $NomBanque = $twig_NomBanque->text;
      print $NomBanque,"\n";
     
      return;
    }
    sub virement
    {
    	&nombanque; #j'ai une erreur du style "cannot call method text". Pourquoi?
    	#Je veux ici, vérifier que le nom de la banque soit égal à Banque Populaire. Si oui, je modifie la balise virement/automatique
    	#du fichier de sortie
    	#Le problème est que je perds le nom de la banque dès que je sors de la première fonction
     
    }
    Souhait fichier de sortie :

    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <PFP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PFPV2_1.xsd">
        <version>2</version>
        <compte>courant</compte>
        <mouvement>aucun</mouvement>
        <emetteur>banque</emetteur>
        <destinataire>client</destinataire>
        <domiciliation>
            <nomBanque>Banque Populaire</nomBanque>
            <adresse>4 rue du bucheron, Cannes</adresse>
            <ouverture>8H30 à 12H et 14H à 17H30</ouverture>
        </domiciliation>
        <virement>
            <automatique>VALEUR CHANGEE</automatique>
            <jour_prelevement>le 05 du mois</jour_prelevement>
        </virement>
    </PFP>

    C'est plus clair comme ça?

  20. #20
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 16
    Points
    16
    Par défaut
    Quelqu'un aurait-il une idée pour la résolution de mon problème?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Parser un XML pour obtenir un autre XML
    Par hedibox dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 13/09/2013, 16h04
  2. representation des donnée en xml pour android sur serveur
    Par kalfadine dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 14/04/2012, 18h19
  3. Réponses: 4
    Dernier message: 27/02/2010, 23h04
  4. [c#][xml] requete xpath sur document xml avec espace de noms
    Par fab56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/02/2009, 12h56
  5. [XML] Recherche Banque de fichiers XML pour tester
    Par MoTUmBo dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 14/10/2006, 12h08

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