Modification XML en Perl
ldld
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
bonjour,
J'ai un fichier xml, et j'ai la traduction de ce fichier en txt. je dois régénérer le même fichier xml mais avec le txt de la traduction.
c'est à dire je garde la même structure xml et je change seulement le texte.
J'ai pensé à cette solution comme je travaille en Perl:
mettre le doc cible dans une liste et remplacer les lignes du doc source.
mon code Perl:
open (FR, "fr.xml");
$/= undef;
while ($linefr=<FR>)
{
if ($linefr =~ /(<.+>+)([^<]+)(<\/.+>)/mg)
{$m = $2;}
print $m;
}
open (AR, "ar.txt");
while ($linear = <AR>)
{@ar = $linear;
for ($i=0;$i<@ar;$i++)
{
$m = $ar[$i];
print $m;
}
}
Le problème c que je veux regénérer le fichier xml que j'ai lu au départ (fr.xml)?
je débute en Perl, si vous avez d'autres idées bcp mieu?
je vous remercie?
bonjour,
J'ai un fichier xml, et j'ai la traduction de ce fichier en txt. je dois régénérer le même fichier xml mais avec le txt de la traduction.
c'est à dire je garde la même structure xml et je change seulement le texte.
J'ai pensé à cette solution comme je travaille en Perl:
mettre le doc cible dans une liste et remplacer les lignes du doc source.
mon code Perl:
open (FR, "fr.xml");
$/= undef;
while ($linefr=<FR>)
{
if ($linefr =~ /(<.+>+)([^<]+)(<\/.+>)/mg)
{$m = $2;}
print $m;
}
open (AR, "ar.txt");
while ($linear = <AR>)
{@ar = $linear;
for ($i=0;$i<@ar;$i++)
{
$m = $ar[$i];
print $m;
}
}
Le problème c que je veux regénérer le fichier xml que j'ai lu au départ (fr.xml)?
je débute en Perl, si vous avez d'autres idées bcp mieu?
je vous remercie?
A voir également:
- Modification XML en Perl
- Suivi de modification word - Guide
- Xml download - Télécharger - Édition & Programmation
- Logiciel gratuit modification pdf - Guide
- Modification dns - Guide
- Office xml handler - Télécharger - Traitement de texte
6 réponses
Salut,
On pourra avoir peut être des idées, mais il faut que tu nous aides ;-)
Voici en quoi tu peux nous aider.
1. tu nous affiche ton fichier xml (tu peux le mettre sur cjoint.com)
2. tu nous dit ce que tu veux traduire
mettre le doc cible dans une liste et remplacer les lignes du doc source.
Il y plusieurs moyens pour traiter un fichier en Perl.
Par exemple
1. tu peux utiliser un fichier temporaire
2. tu peux créer carrément un nouveau fichier suite au traitement de(s) fichier(s)
3. tu peux faire des modifications directement tout en sauvegardant l'original
Je pense que l'utilisation d'une liste n'est pas vraiment nécessaire, mais bon, je ne peux rien dire tant que je ne sais pas exactement ce que tu veux obtenir ;-)
Le mode slurp n'est pas vraiment nécessaire.
De toute façon si le mode slurp est activé tu peux mettre dans une variable scalaire le contenu de fichier
Quand tu écris
$/= undef;
while ($linefr=<FR>)
c'est un peu inutile de faire une boucle sur le handle FR puisqu'il n'y a qu'une seule chaine qui contiens des caractères de saute de lignes à l'interieur
Voici un exemple
Donc le résultat te montre bien qu'il n'y a qu'une seule ligne
Ce qui veut dire qu'il suffit de s'occuper seulement de la variable scalaire
On pourra avoir peut être des idées, mais il faut que tu nous aides ;-)
Voici en quoi tu peux nous aider.
1. tu nous affiche ton fichier xml (tu peux le mettre sur cjoint.com)
2. tu nous dit ce que tu veux traduire
mettre le doc cible dans une liste et remplacer les lignes du doc source.
Il y plusieurs moyens pour traiter un fichier en Perl.
Par exemple
1. tu peux utiliser un fichier temporaire
2. tu peux créer carrément un nouveau fichier suite au traitement de(s) fichier(s)
3. tu peux faire des modifications directement tout en sauvegardant l'original
Je pense que l'utilisation d'une liste n'est pas vraiment nécessaire, mais bon, je ne peux rien dire tant que je ne sais pas exactement ce que tu veux obtenir ;-)
Le mode slurp n'est pas vraiment nécessaire.
De toute façon si le mode slurp est activé tu peux mettre dans une variable scalaire le contenu de fichier
Quand tu écris
$/= undef;
while ($linefr=<FR>)
c'est un peu inutile de faire une boucle sur le handle FR puisqu'il n'y a qu'une seule chaine qui contiens des caractères de saute de lignes à l'interieur
Voici un exemple
lami20j@debian:~/trash$ cat slurp.txt ligne1 ligne2 ligne3 lami20j@debian:~/trash$ cat slurp.pl #!/usr/bin/perl # open FR,"slurp.txt" or die "E/S : $!\n"; $/= undef; #mode slurp while ($linefr=<FR>){ # boucle inutile, il y a une seule ligne print "ligne numéro $. = > $linefr\n"; } __END__ lami20j@debian:~/trash$ perl slurp.pl ligne numéro 1 = > ligne1 ligne2 ligne3
Donc le résultat te montre bien qu'il n'y a qu'une seule ligne
Ce qui veut dire qu'il suffit de s'occuper seulement de la variable scalaire
lami20j@debian:~/trash$ cat slurp.pl #!/usr/bin/perl # open FR,"slurp.txt" or die "E/S : $!\n"; $/=undef; $linefr=<FR>; print "$linefr\n"; __END__ lami20j@debian:~/trash$ perl slurp.pl ligne1 ligne2 ligne3En revanche en désactivant le mode slurp on vois bien les 3 lignes
lami20j@debian:~/trash$ cat slurp.pl #!/usr/bin/perl # open FR,"slurp.txt" or die "E/S : $!\n"; while ($linefr=<FR>){ print "ligne numéro $. = > $linefr\n"; } __END__ lami20j@debian:~/trash$ perl slurp.pl ligne numéro 1 = > ligne1 ligne numéro 2 = > ligne2 ligne numéro 3 = > ligne3 lami20j@debian:~/trash$
Merci pour ces explication:
avant tt je débute en Perl.
j'ai un fichier xml voilà un extrait :
<text id="x.c.hr.un.1979.fr" lang="fr">
<front>
<div type="update">
<p id="un.1979.fr_U.P">blblblblbl</p>
</div>
</front>
<body>
<head id="un.1979.fr_H">blblblblblb</head>
<div type="preamble">
<list type="simple">
<item id="un.1979.fr_B.i-1">
<seg type="membrestates">titre</seg>
</item>
<item>
<seg type="context">
<list type="simple">
<item id="un.1979.fr_B.i-2.i-1">le n°1 de la liste</item>
et j'ai la traduction de ce fichier en anglais en txt.
le but est de générer la même structure xml en utilisant le fichier text (remplacer ce qui est en gras par la traduction. l'objectif est d'avoir deux fichiers xml de même structure dans les deux langues.
mon code Perl:
open (FR, "<convention27.fr.xml") or die "impossible d'ouvrir le fichier $ : $!\n";
while ($line2=<FR>)
{
$line2 =~ s/ +/ /g;
if($line2 =~ />([^<]+)([<\/]+)/mg) #cette regexp reconnait tout le texte entre les balise xml
{
$m = $1;
print "$m\n";
@fr = split (/\n/,$m);
}
}
open (AR,"<:utf8","conv_fem.txt");
while ($line =<AR>)
{
if (length $line<=15) # j'ai enlevé les ligne dont j'ai pas besoin
{
$res = $line;
}
$line =~s/$res//g;
@ar = $line;
for ($i=0;$i<@fr;$i++)
{
$fr[$i]=$ar[$i];
}
$m = join ("\n",@fr);
print $m;
}
avec ce programme je remplace les deux listes.
Je peux même changer le texte du fichier xml sans le mettre dans une liste @fr.
je veux récupérer mon fichier xml de départ avec les modifications que je viens de faire sur la $m.
Merci pour ton aide
avant tt je débute en Perl.
j'ai un fichier xml voilà un extrait :
<text id="x.c.hr.un.1979.fr" lang="fr">
<front>
<div type="update">
<p id="un.1979.fr_U.P">blblblblbl</p>
</div>
</front>
<body>
<head id="un.1979.fr_H">blblblblblb</head>
<div type="preamble">
<list type="simple">
<item id="un.1979.fr_B.i-1">
<seg type="membrestates">titre</seg>
</item>
<item>
<seg type="context">
<list type="simple">
<item id="un.1979.fr_B.i-2.i-1">le n°1 de la liste</item>
et j'ai la traduction de ce fichier en anglais en txt.
le but est de générer la même structure xml en utilisant le fichier text (remplacer ce qui est en gras par la traduction. l'objectif est d'avoir deux fichiers xml de même structure dans les deux langues.
mon code Perl:
open (FR, "<convention27.fr.xml") or die "impossible d'ouvrir le fichier $ : $!\n";
while ($line2=<FR>)
{
$line2 =~ s/ +/ /g;
if($line2 =~ />([^<]+)([<\/]+)/mg) #cette regexp reconnait tout le texte entre les balise xml
{
$m = $1;
print "$m\n";
@fr = split (/\n/,$m);
}
}
open (AR,"<:utf8","conv_fem.txt");
while ($line =<AR>)
{
if (length $line<=15) # j'ai enlevé les ligne dont j'ai pas besoin
{
$res = $line;
}
$line =~s/$res//g;
@ar = $line;
for ($i=0;$i<@fr;$i++)
{
$fr[$i]=$ar[$i];
}
$m = join ("\n",@fr);
print $m;
}
avec ce programme je remplace les deux listes.
Je peux même changer le texte du fichier xml sans le mettre dans une liste @fr.
je veux récupérer mon fichier xml de départ avec les modifications que je viens de faire sur la $m.
Merci pour ton aide
Salut,
Si vous avez des idées sur ma question sur modification de fichier XML par Perl?
merci d'avance
Si vous avez des idées sur ma question sur modification de fichier XML par Perl?
merci d'avance
salut;
je t envoyé les deux fichiers xml et txt dans cjoint.com
texte_anglais_balise
et l'autre traduction
merci pour ton aide.
je t envoyé les deux fichiers xml et txt dans cjoint.com
texte_anglais_balise
et l'autre traduction
merci pour ton aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voilà les deux crées suite à l'insertion des fichiers ds cjoint
https://www.cjoint.com/?iFwV5ZM02y pour le fichier texte
https://www.cjoint.com/?iFwXqNFKg4 pour le fichier Xml
a partir du fichier Xml je vx créer celui de la traduction.
Merci
https://www.cjoint.com/?iFwV5ZM02y pour le fichier texte
https://www.cjoint.com/?iFwXqNFKg4 pour le fichier Xml
a partir du fichier Xml je vx créer celui de la traduction.
Merci