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::Twig et caracteres incorrectes


Sujet :

Modules Perl

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut XML::Twig et caracteres incorrectes
    Salut tout le monde,

    J ai utilisé le module XML::Twig. mais j ai des problemes avec des caracteres allmandes comme les ü, ö et ä .

    Est ce que le module ne supporte pas le encoding UTF-8 ou est le probleme?

    merci pour votre aide.

  2. #2
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    mon xml je le lis par ligne de commande il contient des caracteres comme ü.
    j ai utilisé le encode module de la maniere suivante mais ca pas marcher
    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
     
    use strict;
    use XML::Twig;
    use Encode;
     
    &as_xml(shift @ARGV);
     
    sub as_xml{
    my %change=
      ( CANErrInvalid_M => 'CANErrInvalid',
        CANErrMisc_M     => 'CANErrMisc',
        Conversion_M  => 'Conversion',
        Details_M   => 'Details',
        LoopTime_M   => 'LoopTime',
        Signal_x0020_Source_M   => 'Signal_x0020_Source',
      );
     
    # let's build the start_tag_handlers
    my $handlers;
    while( my( $old_tag, $new_tag)= each( %change) )                    # each handler
      { $handlers->{$old_tag}= sub { $_[1]->set_gi( $new_tag); }; }     # changes a tag
     
     
    my $twig= new XML::Twig( start_tag_handlers => $handlers,
                             twig_handlers      => 
                                 { '_all_' => sub { $_[0]->flush; } },  # flush all elements
                           ); 
    $twig->parse(shift, ProtocolEncoding => "UTF-8");
     
    $twig->parsefile(shift);    # process the twig
    $twig = encode("utf-8",$twig);
    }
    le output ne marche pas que dans un editeur notepad

    ca me fais plaisir que quelqu un m aide.
    Merci

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    je serais tres reconaissant pour vos coups de pousses.

    Merci!

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    quel est ton souci ?

    t'arrive pas à parser un fichier xml avec des données en allemand, ou bien t'arrive pas à en créer un avec des données en allemand ?

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    Merci pour ton feedback.
    J ai un fichier xml qui contient des données en allmands comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    --fichier.xml--
     
    <?xml version="1.0" encoding="UTF-8" ?> 
      - <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2009-03-09T15:12:49">
         <titre>
              <sous_titre1>über</sous_titre1>
              <sous_titre2>üngültig</sous_titre2>
          </titre>
         <titre>
              <sous_titre1>öblabla</sous_titre1>
              <sous_titre2>äblabla</sous_titre2>
          </titre>
      </dataroot>
    j ai parser le mon fichier en utilisant le module que vous m avez suggesté xml::twig alors j ai changer le nom de certaine balise ca a marcher c est pas mon probleme maintenant.
    mais lorsque je ouvre le fichier modifié avec ce code (appelant le twig.pl):

    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
    use strict;
    use XML::Twig;
    use XML::Parser;
     
    &as_xml("fichier.xml");
     
    sub as_xml{
    my %change=
      (
        sous_titre1 => 'under_title1',
        sous_titre1 => 'under_title2',
      );
     
    # let's build the start_tag_handlers
    my $handlers;
    while( my( $old_tag, $new_tag)= each( %change) )                    # each handler
      { $handlers->{$old_tag}= sub { $_[1]->set_gi( $new_tag); }; }     # changes a tag
     
     
    my $twig= new XML::Twig( start_tag_handlers => $handlers,
    						 twig_handlers      => 
                                 { '_all_' => sub { $_[0]->flush; } },  # flush all elements
                           ); 
    $twig->parsefile("fichier.xml");    # process the twig
    }
    je l ouvre par le cmd et je le sauvgarde dans temp.xml de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Perl\bin>perl "u:\perl tutorial\twig.pl" c:\Perl\bin\fichier.xml >temp.xml
    temp.xml ne s ouvoure pas correctement dans l internet explorer il me dis qu il ya des caracteres invalides (ö,ä...)
    il s ouvre avec le notepad.
    j espere que j etais clair cette fois.
    Merci pour l aide

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    En fait ton souci est que IE n'arrive pas à ouvrir ton fichier car il ne le reconnait pas comme un fichier utf-8. Le fait de mettre la balise encode à utf-8 ne suffit pas car le fichier en lui même n'est pas en utf-8.

    De plus, pour récupérer les informations fournies par twig, le plus propre est d'utiliser la fonctionne print de twig directement et de le printer dans un fichier.

    Voici ton code corrigé avec un rajout d'indentation :

    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
    #!/usr/bin/perl
    use strict;
    use XML::Twig;
     
    # utf8 file creation
    open (my $fh, '>:encoding(UTF-8)', 'temp.xml') 
      or die("Unable to create temp.xml");
    &as_xml("fichier.xml", $fh);
    close($fh);
     
     
    sub as_xml {
        my ($fichier, $FileHandle ) = @_;
        my %change = (
            sous_titre1 => 'under_title1',
            sous_titre2 => 'under_title2',
        );
     
        # let's build the start_tag_handlers
        my $handlers;
        while ( my ( $old_tag, $new_tag ) = each(%change) ) {  # each handler
            $handlers->{$old_tag} = sub { $_[1]->set_gi($new_tag); };
        }                                                      # changes a tag
     
        my $twig = new XML::Twig(
            PrettyPrint => "indented",  # print indentation
            start_tag_handlers => $handlers,
        );
        $twig->parsefile($fichier);     # process the twig
        $twig->print($FileHandle);      # print result in the file directly
        return;
    }
    Pour l'appeler, tu as juste besoin de faire :
    perl twig.pl
    Voilà

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    merci infiniment mon ami

  8. #8
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    N'oubliez pas le tag résolu

  9. #9
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    désolé, mais encore une chose :
    j ai eu cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    no element found at line 1, column 0, byte 0 at C:/Perl/lib/XML/Parser.pm line 187
     at u:\perl tutorial\twig.pl line 33
     at u:\perl tutorial\twig.pl line 33

  10. #10
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    suite à quoi ?

  11. #11
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    j ai executé ton code mais j ai juste modifié le nom du fichier et les balises a modifier sinon le reste je l ai pas toucher. et j ai ce message d erreur.

    dois je donner le nom de fichier complet avec perl c:\perl\bin\nomdufichier.xml
    ou bien juste nomdufichier.xml ?

  12. #12
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bon je te remets le code :
    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
    34
    35
    #!/usr/bin/perl
    use strict;
    use XML::Twig;
     
    my $InputFile  = "fichier.xml"; # ou C:/perl/bin/nomdufichier.xml
    my $OutputFile = "temp.xml";
     
    # Creation of utf8 file
    open (my $fh, '>:encoding(UTF-8)', $OutputFile) 
      or die("Impossible de créer le fichier $OutputFile");
    &as_xml($InputFile, $fh);
    close($fh);
     
     
    sub as_xml {
        my ($fichier, $FileHandle ) = @_;
        my %change = (
            sous_titre1 => 'under_title1',
            sous_titre2 => 'under_title2',
        );
     
        # let's build the start_tag_handlers
        my $handlers;
        while ( my ( $old_tag, $new_tag ) = each(%change) ) {  # each handler
            $handlers->{$old_tag} = sub { $_[1]->set_gi($new_tag); };
        }                                                      # changes a tag
     
        my $twig = new XML::Twig(
            PrettyPrint => "indented",  # Indent the print
            start_tag_handlers => $handlers,
        );
        $twig->parsefile($fichier);     # process the twig
        $twig->print($FileHandle);      # print result in the file directly
        return;
    }
    Pour les noms de tes fichiers, tu les modifies ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $InputFile  = "fichier.xml"; # ou C:/perl/bin/nomdufichier.xml
    my $OutputFile = "temp.xml";
    Tu mets le chemin complet s'il n'est pas présent dans le répertoire courant de ton script.

    Dernier conseil, dans ton dernier post, tu as mis ceci :
    c:\perl\bin\nomdufichier.xml
    J'espère que tu ne fais absolument rien dans le répertoire de Perl Je te le déconseille fortement

  13. #13
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    merci encore!!!

    pour ton conseil t as raison je travaille en dehors de mon repertoire perl

    merci.

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

Discussions similaires

  1. [XML] [Encoding] Codifier caractère null en XML
    Par Matmal11 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 10/11/2006, 13h59
  2. [HTML] texte extrait de xml : pb de caractères
    Par saluCseb dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 22/08/2006, 21h45
  3. Réponses: 1
    Dernier message: 01/07/2006, 11h18
  4. [XML] Probleme de caracteres spéciaux
    Par Azonec dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/12/2005, 15h48
  5. Analyseur XML : extraction des caracteres spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/07/2005, 15h07

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