Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

parseur XSLT

7 réponses
Avatar
paul POULAIN
Bonjour,

je suis à la recherche d'un parseur XSLT Perl qui soit :
* correctement performant en termes de rapidité
* ne nécessite pas l'installation de logiciels annexes trop complexes.

Merci de votre aide en ces temps de grosse chaleur
--
Paul

7 réponses

Avatar
Klaus
paul POULAIN wrote:
Bonjour,

je suis à la recherche d'un parseur XSLT Perl qui soit :
* correctement performant en termes de rapidité
* ne nécessite pas l'installation de logiciels annexes trop complexes.


Avec Activestate Perl v5.8.8 sous Windows XP, j'utilise la méthode
"transformNodeToObject" de MSXML (accessible par Win32::OLE).

voir http://www.perl.com/pub/a/2001/04/17/msxml.html

Avatar
paul POULAIN
Klaus wrote:

paul POULAIN wrote:
Bonjour,

je suis à la recherche d'un parseur XSLT Perl qui soit :
* correctement performant en termes de rapidité
* ne nécessite pas l'installation de logiciels annexes trop complexes.


Avec Activestate Perl v5.8.8 sous Windows XP, j'utilise la méthode
"transformNodeToObject" de MSXML (accessible par Win32::OLE).

voir http://www.perl.com/pub/a/2001/04/17/msxml.html


heum... j'ai pas MS-windows
--
Paul


Avatar
Klaus
paul POULAIN wrote:
Klaus wrote:

paul POULAIN wrote:
Bonjour,

je suis à la recherche d'un parseur XSLT Perl qui soit :
* correctement performant en termes de rapidité
* ne nécessite pas l'installation de logiciels annexes trop complexe s.


Avec Activestate Perl v5.8.8 sous Windows XP, j'utilise la méthode
"transformNodeToObject" de MSXML (accessible par Win32::OLE).

voir http://www.perl.com/pub/a/2001/04/17/msxml.html


heum... j'ai pas MS-windows


Il existe aussi "XML::LibXslt" sur CPAN, voir http://tinyurl.co.uk/1tx5
Ils disent que c'est très rapide.

Je n'ai jamais réussi à installer "XML::LibXslt" chez moi sur Windows
XP, mais peut-être ça marche sur ton système ?



Avatar
Paul Gaborit
À (at) 3 Aug 2006 10:28:10 -0700,
"Klaus" écrivait (wrote):
Il existe aussi "XML::LibXslt" sur CPAN, ...


Son vrai nom est XML::LibXSLT (avec les bonnes majuscules).

Ils disent que c'est très rapide.
Je n'ai jamais réussi à installer "XML::LibXslt" chez moi sur Windows
XP, mais peut-être ça marche sur ton système ?


C'est un enrobage Perl de la bibliothèque libxml2 (et libxslt) du
projet Gnome. C'est effectivement un code de grande qualité.

La bibliothèque 'libxml2' elle-même existe pour Windows. Mais je ne
sais pas si les modules Perl existent en PPM.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
jl_morel
Dans l'article ,
a dit...

La bibliothèque 'libxml2' elle-même existe pour Windows. Mais je ne
sais pas si les modules Perl existent en PPM.



La version 1.58 est disponible sur le dépot ppm de l'université de Winnipeg :

http://cpan.uwinnipeg.ca/module/XML::LibXSLT

HTH

--
J-L.M.
http://www.bribes.org/perl

Avatar
nadjia
salutation:


Tout d'abord je me présente:
je suis étudiante en informatique je suis en ce moment en
préparation de mon projet de fin d'étude , l'objectif global du
projet est de faire une translation entre deux logiciels , bon bref
j'ai réaliser cette translation à l'aide de script "xslt" que je
compile à l'aide de la commande "xsltproc" sous linux , et ça étais
mieux de l'interpeler à l'aide de scripts PERL/CGI :

main1.cgi:

#!/usr/bin/perl

printf STDOUT "Content-type: text/htmlnn";
printf STDOUT "<HTML><HEAD>";
printf STDOUT "<TITLE> Le module de translation </TITLE>";
printf STDOUT "</HEAD>";

printf STDOUT "
print "<form actionfiltered=/cgi-bin/main11.cgi>";
print "<center><table border widthp%>";
print "<tr bgcolor=#9999ff> <td><b> TRANSLATION DES
ORDINATEURS</b></td> </tr>";
print "<tr bgcolor=#cccccc> <td><table width0%>";
print "<tr> <td valign=top><b> CHEMIN DU FICHIER SOURCE</b>";
print "<input name=xmlfile size value=''></td> </tr>";
print "<tr bgcolor=#cccccc> <td><table width0%>";
print "<tr> <td valign=top><b> CHEMIN DU FICHIER RESULTAT</b>";
print "<input name=resultat size value=''></td> </tr>";
print "<br><td><br><center><input type=submit value='OK'>";
print "</form>";
print "</table></td></tr></table><br>";
print "<H5><a HREF=http://127.0.0.1/cgi-bin/main.cgi"> <-- Page
Principal</a></H5><br>n";

main11.cgi:

#!/usr/bin/perl

$buffer=$ENV{"QUERY_STRING"};
# onfiltered=value
local(@champs) = split(/&/, $buffer);
local($donnees) = "";
# recuperation et mise en forme des donnees
# onfiltered=value
foreach $i (0 .. $#champs)
{
# On separe chaque champ en une cle et sa valeur
($key, $val) = split(/=/,$champs[$i],2);
#decode les valeurs
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;
#if ( $i == 0 ){my $xmlfile = $val };
#if ( $i == 1 ){my $resultat = $val };
@ARGV==$champs[$i];
}
system("/usr/bin/perl perl1.pl $xmlfile $resultat");
printf STDOUT "Content-type: text/htmlnn";
printf STDOUT "<HTML><HEAD>";
printf STDOUT "<TITLE> Le module de translation </TITLE>";
printf STDOUT "</HEAD>";
printf STDOUT "


perl1.pl:

usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
my ($xmlfile,$resultat) = @ARGV;
my $xslfile="/var/www/cgi-bin/essegroup22.xsl";
#my $xmlfile=" /home/nadjia/Desktop/configuration.fwb";
my $sortie = qx(/usr/bin/xsltproc $xslfile $xmlfile );
#my $y='>> /home/nadjia/Desktop/ktttttttttt.xml';
open ( MON_XML, $resultat );
{
print MON_XML "$sortie";}
close (MON_XML);


mon problème maintenant c'est que je n'arrive pas à recuperer à la
fois les paramètres $xmlsource et $resultat passés en url et les
utiliser lors de l'appel du script "perl1.pl" à l'aide de la commande
:system("/usr/bin/perl perl1.pl $xmlfile $resultat")




Je vous remerci d'avance ,

cordialement Nadjia
Avatar
Klaus
nadjia wrote:
main1.cgi:

#!/usr/bin/perl


il est généralement conseillé de rajouter:

use strict;
use warnings;

voir perlstyle
http://perl.enstimac.fr/DocFr/perlstyle.html

printf STDOUT "Content-type: text/htmlnn";
printf STDOUT "<HTML><HEAD>";
printf STDOUT "<TITLE> Le module de translation </TITLE>";
printf STDOUT "</HEAD>";


Ne tombez pas dans le piège d'utiliser printf() alors qu'un simple
print() suffirait. print() est plus efficace et moins sujet à erreur.

voir perlfunc, paragraphe "printf"
http://perl.enstimac.fr/DocFr/perlfunc.html#item_printf

Aussi, je me demande si le "STDOUT" est vraiment nécessaire,
normalement il n'y a pas de besoin de préciser "STDOUT", un simple
print "..." suffit.

Autrement, pour fair du CGI (écrire les balises "<HTML>", "<HEAD>",
etc...), il vaut mieux utiliser le module CGI, comme par exemple dans
le programme suivant:

===========
use CGI qw(:standard);
print header;
print start_html("Hello World");
===========

On trouve des références sur la documentation CGI dans
http://perl.enstimac.fr/DocFr/perlfaq2.html


perl1.pl:

usr/bin/perl -w


il manque le "#!", il faut plutôt dire:
#!/usr/bin/perl -w

mais encore mieux, remplacer le "#!/usr/bin/perl -w" par:
use warnings;

use strict;
très bien


use CGI::Carp qw(fatalsToBrowser);
Ce programme "perl1.pl" ne fait pas pas de CGI, mais le module

"CGI::Carp" est utile uniquement pour CGI, donc le module est inutile
dans ce programme.
(pour rappel: l'autre programme "main1.cgi" fait du CGI, mais
bizarrement il n'y avait pas de "use CGI..." dans "main1.cgi")

open ( MON_XML, $resultat );


1. il faut toujours tester si le open a réussi, et en cas d'échec
préciser le problème dans la fonction "die()" avec la variable "$!".
2. il est conseillé, dans la fonction open(), de remplacer les
variables de paquage (comme, par exemple "MON_XML") par des variables
lexicales (comme par exemple "my $mon_xml").
3. il est conseillé d'utiliser la fonction "open()" avec 3 (et non pas
2) paramètres.

donc:
open my $mon_xml, '<', $resultat or die "Erreur lecture '$resultat'
($!)";

print MON_XML "$sortie";}


Vous avez placé la variable $sortie entre guillemets, sans autres
caractères. Dans ce cas, Il vaut mieux utiliser la variable sans
guillemets.

voir perlfaq4
http://perl.enstimac.fr/DocFr/perlfaq4.html

En quoi est-ce un problème de toujours placer ``$vars'' entre
guillemets ?

Le problème est que ces guillemets forcent la conversion en chaîne,
imposant aux nombres et aux références de devenir des chaînes, même
lorsqu'on ne le souhaite pas. Pensez-y de cette façon : l'expansion
des guillemets est utilisée pour produire de nouvelles chaînes. Si
vous avez déjà une chaîne, pourquoi en vouloir plus ?