2008-10-30 5 views
2

Y at-il un module Perl là-bas qui peut prendre mauvais HTML (comme ce qui est copié à partir de Microsoft Word) et l'analyser en HTML bien formaté? J'ai regardé HTML :: Tidy, mais il a obtenu horrible reviews on CPAN. Nous avons un module hérité personnalisé qui est essentiellement un wrapper pour la version de ligne de commande de tidy (qui semble être à peu près ce que HTML :: Tidy est), mais il écrit les fichiers sur le disque et les relit, ce qui peut être une grande performance peine. Certainement avec les puissantes capacités d'analyse syntaxique de Perl, il y a une meilleure façon de faire ça correctement?Quelle est la meilleure façon d'analyser HTML à partir d'un éditeur de texte enrichi en Perl?

Répondre

1

Deux choses:

1) Il n'y a vraiment pas une alternative à tidy, car il fait le travail pour la plupart des gens. Y a-t-il un comportement de l'outil de ligne de commande qui ne vous convient pas? Peut-être que si vous donniez un exemple de pourquoi ce n'est pas à la hauteur, nous pourrions mieux comprendre le problème.

2) En ce qui concerne la performance, vous pourriez envisager de modifier votre wrapper pour appeler open2 sur bien rangé pour éviter le disque aller-retour:

use IPC::Open2; 

my $pid = open2(\*FROM_TIDY, \*TO_TIDY, '/usr/bin/tidy') 
    or die "couldn't open"; 

# give tidy our html and close the handle to tell it we're done 
print(TO_TIDY $html_string); 
close(TO_TIDY); 

# read in the tidy html 
while (<FROM_TIDY>) { 
    print; 
} 
close(FROM_TIDY); 
+0

qui est susceptible de se bloquer (avec blocage bien rangé sur une écriture FROM_TIDY et le blocage de perl sur une écriture à TO_TIDY). – ysth

+0

Non. Tidy lit tout le fichier avant de l'analyser, puis écrit le fichier entier. – bmdhacks

Questions connexes