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.
Version imprimable
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 notepadCode:
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 ?
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:
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:
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: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:
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àCitation:
perl twig.pl
merci infiniment mon ami :merci:
N'oubliez pas le tag résolu :D
désolé, mais encore une chose :
j ai eu cette erreur:
Code:
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 ?
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 iciCode:
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:
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 Perl ;) Je te le déconseille fortementCitation:
c:\perl\bin\nomdufichier.xml
merci encore!!!
pour ton conseil t as raison je travaille en dehors de mon repertoire perl
merci.