xml2html.pl

#!/usr/bin/perl
use locale; #caracteres accentues
#On lance comme cela: perl xml2html.pl
#On obtient: fichier.xml.html
print "Bienvenu(e) au programme qui permet \n d'afficher les fichiers XML en HTML. \n";
print "Nom du fichier de travail, de preference un .xml \n au format UNIX: \n";
my $file=<STDIN>;
chomp($file);
print "S'agit-il de la rubrique livres (tape: l) ou culture \n (tape: c) ou ce n'est pas important (tape: g)? \n";
my $rubrique=<STDIN>;
chomp($rubrique);
open(FILEIN, $file);
open(FILEOUT, ">$file.html");
my $DUMPFULL="";
if (($rubrique=~/l/) || ($rubrique=~/c/) || ($rubrique=~/g/))
{
while(my $recup=<FILEIN>)
{
#1. transcodage # Re-édite constament le texte
##Les non métacaractères##
$recup=~s/&/&amp;/g;
####Les métacaractères####
$recup=~s/\>/&gt;/g;
$recup=~s/\</&lt;/g;
$recup=~s/\"/&quot;/g;
####Les Accents####
$recup=~s/à/&agrave;/g;
$recup=~s/á/&aacute;/g;
$recup=~s/â/&acirc;/g;
$recup=~s/ã/&atilde;/g;
$recup=~s/ä/&auml;/g;
$recup=~s/å/&aring;/g;
$recup=~s/æ/&aelig;/g;
$recup=~s/è/&egrave;/g;
$recup=~s/é/&eacute;/g;
$recup=~s/ê/&ecirc;/g;
$recup=~s/ë/&euml;/g;
$recup=~s/è/&egrave;/g;
$recup=~s/é/&eacute;/g;
$recup=~s/ê/&ecirc;/g;
$recup=~s/ë/&euml;/g;
$recup=~s/ì/&igrave;/g;
$recup=~s/í/&iacute;/g;
$recup=~s/î/&icirc;/g;
$recup=~s/ï/&iuml;/g;
$recup=~s/ò/&ograve;/g;
$recup=~s/ó/&oacute;/g;
$recup=~s/ô/&ocirc;/g;
$recup=~s/õ/&otilde;/g;
$recup=~s/ö/&ouml;/g;
$recup=~s/ù/&ugrave;/g;
$recup=~s/ú/&uacute;/g;
$recup=~s/û/&ucirc;/g;
$recup=~s/ü/&uuml;/g;
$recup=~s/ç/&ccedil;/g;
##Les paragraphes et les line breaks##
$recup=~s/(\s)*\n/\n/g; #supprime les espaces avant le retour à la ligne
$recup=~s/^\n/<p>\n/g; #met des paragraphes dans tous les sauts de ligne
if ($recup=~/[^<p>]\n/g)
{
$recup=~s/\n/<\/br>\n/g;
};# met des br en fin de ligne lorsque la balise <p> n'est pas là
##Les erreurs de retour à la ligne lorsque le texte est mélangé avec CR##
#if ($recup=~/\w<\/br>\n/g)
# {
# $recup=~s/<\/br>\n//g
# };
#if ($recup=~/punct<\/br>\n/g)
# {
# $recup=~s/<\/br>\n//g
# }; # On ne peut pas sélectionner le point final
# Toutes les balises XML en bleu
$recup=~s/&lt\;/<font color=\"blue\">&lt\;/g;
$recup=~s/&gt\;/&gt\;<\/font>/g;
#XML et XSL
$treetagger=$recup; #XML
$treetagger=~s/xml version/<font color=\"\#DDA3DA\">xml version<\/font>/g; #XML et XSL
$treetagger=~s/&quot;type&quot;/&quot;<font color=\"\#FFBBFA\">type<\/font>&quot;/g; #Les valeurs de rose à mauve pour le XML
$treetagger=~s/&quot;lemma&quot;/&quot;<font color=\"\#DDA3DA\">lemma<\/font>&quot;/g;
$treetagger=~s/&quot;string&quot;/&quot;<font color=\"\#8655B4\">string<\/font>&quot;/g;
$treetagger=~s/<font color=\"blue\">&lt\;document&gt\;<\/font>/<font color=\"\#CA4A27\">&lt\;document&gt\;<\/font>/g;
$treetagger=~s/<font color=\"blue\">&lt\;\/document&gt\;<\/font>/<font color=\"\#CA4A27\">&lt\;\/document&gt\;<\/font>/g;
$recupxsl01=$treetagger; #XSL
$recupxsl01=~s/stylesheet/<font color=\"\#DDA3DA\">stylesheet<\/font>/g; #XSL
$recupxsl01=~s/xmlns/<font color=\"\#FFBBFA\">xmlns<\/font>/g;
$recupxsl01=~s/template match/<font color=\"\#8655B4\">template match<\/font>/g;
$recupxsl01=~s/apply-templates select/<font color=\"\#8655B4\">apply-templates select<\/font>/g;
$recupxsl01=~s/&lt\;\/xsl:template&gt\;/&lt\;\/xsl:<font color=\"\#8655B4\">template<\/font>&gt\;/g;
$recupxsl01=~s/&lt\;html&gt\;/&lt\;<font color=\"\#E2B8E8\">html<\/font>&gt\;/g;
$recupxsl01=~s/&lt\;\/html&gt\;/&lt\;<font color=\"\#E2B8E8\">\/html<\/font>&gt\;/g;
$recupxsl01=~s/following-sibling/<font color=\"\#FF366C\">following-sibling<\/font>/g;
$recupxsl01=~s/preceding-sibling/<font color=\"\#FF366C\">preceding-sibling<\/font>/g;
$recupxsl01=~s/value-of select/<font color=\"\#FFBBFA\">value-of select<\/font>/g;
unless ($recupxsl01=~/(\w)(and)/) {
$recupxsl01=~s/and/<font color=\"\#FF366C\">and<\/font>/g; # Peut poser problème si le texte est en anglais
}
$recupxsl01=~s/text\(\)/<font color=\"\#DDA3DA\">text\(\)<\/font>/g;
$recupxsl01=~s/text/<font color=\"\#DDA3DA\">text<\/font>/g;
$recupxsl01=~s/contains/<font color=\"\#FFBBFA\">contains<\/font>/g; # Peut poser problème si le texte est en anglais
$recupxsl01=~s/\'/<font color=\"\#D400E8\">\&#39\;<\/font>/g;
$recupxsl01=~s/\.\//<font color=\"\#D400E8\">\.\/<\/font>/g;
$recupxsl01=~s/PRP/<font color=\"\#DDA3DA\">PRP<\/font>/g;
$recupxsl01=~s/PREP/<font color=\"\#DDA3DA\">PREP<\/font>/g;
$recupxsl01=~s/NOM/<font color=\"\#DDA3DA\">NOM<\/font>/g;
$recupxsl01=~s/ADJ/<font color=\"\#DDA3DA\">ADJ<\/font>/g;
#2. Memorisation dans DUMPFULL # Ne change que une fois chaque ligne
$DUMPFULL.=$recupxsl01;
};
};
#Si il y a en problème de concurrence entre les balises dans la mémoire virtuelle, faire comme cela:
#$recup01.="1 bbb 1\n 1 aaab";
#print "\nRecup01: $recup01";
#$recup02=$recup01;
#$recup02=~s/1/2/g;
#print "\nRecup02: $recup02";
#$recup03=$recup02;
#$recup03=~s/b/c/g;
#print "\nRecup03: $recup03";

if ($rubrique=~/l/)
{
#3. En-tete pour livres
print FILEOUT "<html>\n
<head>\n
<title>Les rubriques Culture et Livres sur lemonde.fr<\/title>\n
<meta http-equiv=\"content-type\" content=\"text\/html; charset=windows-1250\">\n
<\/head>\n
<body bgcolor=\"\#5EC3FB\" text=\"\#3F0F11\" link=\"\#B40002\" alink=\"\#0C340C\" vlink=\"\#67284C\">\n
<body background =\".\/IMAGES\/rss-news.jpg\">\n
<blockquote>\n
\n
<h2><font color=\"\#390917\">",$file,"<\/font><\/h2>\n";
}
elsif ($rubrique=~/c/)
{
#3. En-tete pour culture
print FILEOUT "<html>\n
<head>\n
<title>Les rubriques Culture et Livres sur lemonde.fr<\/title>\n
<meta http-equiv=\"content-type\" content=\"text\/html; charset=windows-1250\">\n
<\/head>\n
<body bgcolor=\"\#5EC3FB\" text=\"\#3D5A33\" link=\"\#B40002\" alink=\"\#0C340C\" vlink=\"\#67284C\">\n
<body background =\".\/IMAGES\/rss-news.jpg\">\n
<blockquote>\n
\n
<h2><font color=\"\#390917\">",$file,"<\/font><\/h2>\n";
}
else
{
#3. En-tete pour les autres fichiers de ma page web
print FILEOUT "<html>\n
<head>\n
<title>Les rubriques Culture et Livres sur lemonde.fr<\/title>\n
<meta http-equiv=\"content-type\" content=\"text\/html; charset=windows-1250\">\n
<\/head>\n
<body bgcolor=\"\#5EC3FB\" text=\"\#12162E\" link=\"\#B40002\" alink=\"\#0C340C\" vlink=\"\#67284C\">\n
<body background =\".\/IMAGES\/rss-news.jpg\">\n
<blockquote>\n
\n
<h2><font color=\"\#390917\">",$file,"<\/font><\/h2>\n";
};
#4. Remplacement des entites
print FILEOUT $DUMPFULL;
# Pied de page
print FILEOUT "<p><a href=\"\.\/index.htm\"><img src=\"\.\/IMAGES\/index\.gif\"><\/a><\/blockquote>\n<\/body>\n<\/html>\n";
print "\nLe fichier bien accentue se nomme $file.html";
#----------------------------------------------
close(FILEIN);
close(FILEOUT);