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.
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.
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
le output ne marche pas que dans un editeur notepad
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); }
ca me fais plaisir que quelqu un m aide.
Merci
je serais tres reconaissant pour vos coups de pousses.
Merci!
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 ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Merci pour ton feedback.
J ai un fichier xml qui contient des données en allmands comme cela:
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.
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>
mais lorsque je ouvre le fichier modifié avec ce code (appelant le twig.pl):
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
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 }
temp.xml ne s ouvoure pas correctement dans l internet explorer il me dis qu il ya des caracteres invalides (ö,ä...)
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
il s ouvre avec le notepad.
j espere que j etais clair cette fois.
Merci pour l aide
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 :
Pour l'appeler, tu as juste besoin de faire :
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; }
Voilàperl twig.pl
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
merci infiniment mon ami![]()
N'oubliez pas le tag résolu![]()
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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
suite à quoi ?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
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 ?
Bon je te remets le code :
Pour les noms de tes fichiers, tu les modifies ici
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; }
Tu mets le chemin complet s'il n'est pas présent dans le répertoire courant de ton script.
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";
Dernier conseil, dans ton dernier post, tu as mis ceci :
J'espère que tu ne fais absolument rien dans le répertoire de Perlc:\perl\bin\nomdufichier.xmlJe te le déconseille fortement
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
merci encore!!!
pour ton conseil t as raison je travaille en dehors de mon repertoire perl
merci.
Partager