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/&/&/g; ####Les métacaractères#### $recup=~s/\>/>/g; $recup=~s/\</</g; $recup=~s/\"/"/g; ####Les Accents#### $recup=~s/à/à/g; $recup=~s/á/á/g; $recup=~s/â/â/g; $recup=~s/ã/ã/g; $recup=~s/ä/ä/g; $recup=~s/å/å/g; $recup=~s/æ/æ/g; $recup=~s/è/è/g; $recup=~s/é/é/g; $recup=~s/ê/ê/g; $recup=~s/ë/ë/g; $recup=~s/è/è/g; $recup=~s/é/é/g; $recup=~s/ê/ê/g; $recup=~s/ë/ë/g; $recup=~s/ì/ì/g; $recup=~s/í/í/g; $recup=~s/î/î/g; $recup=~s/ï/ï/g; $recup=~s/ò/ò/g; $recup=~s/ó/ó/g; $recup=~s/ô/ô/g; $recup=~s/õ/õ/g; $recup=~s/ö/ö/g; $recup=~s/ù/ù/g; $recup=~s/ú/ú/g; $recup=~s/û/û/g; $recup=~s/ü/ü/g; $recup=~s/ç/ç/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/<\;/<font color=\"blue\"><\;/g; $recup=~s/>\;/>\;<\/font>/g; #XML et XSL $treetagger=$recup; #XML $treetagger=~s/xml version/<font color=\"\#DDA3DA\">xml version<\/font>/g; #XML et XSL $treetagger=~s/"type"/"<font color=\"\#FFBBFA\">type<\/font>"/g; #Les valeurs de rose à mauve pour le XML $treetagger=~s/"lemma"/"<font color=\"\#DDA3DA\">lemma<\/font>"/g; $treetagger=~s/"string"/"<font color=\"\#8655B4\">string<\/font>"/g; $treetagger=~s/<font color=\"blue\"><\;document>\;<\/font>/<font color=\"\#CA4A27\"><\;document>\;<\/font>/g; $treetagger=~s/<font color=\"blue\"><\;\/document>\;<\/font>/<font color=\"\#CA4A27\"><\;\/document>\;<\/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/<\;\/xsl:template>\;/<\;\/xsl:<font color=\"\#8655B4\">template<\/font>>\;/g; $recupxsl01=~s/<\;html>\;/<\;<font color=\"\#E2B8E8\">html<\/font>>\;/g; $recupxsl01=~s/<\;\/html>\;/<\;<font color=\"\#E2B8E8\">\/html<\/font>>\;/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\">\'\;<\/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);