Pregunta
Después de pasar algunas horas con el Ruby Debugger, finalmente aprendí que tengo que limpiar algunas páginas HTML mal formadas antes de poder enviarlas a Hpricot. La mejor solución que encontré hasta ahora es la interfaz Tidy Ruby .
Tidy funciona muy bien desde la línea de comandos y también funciona la interfaz de Ruby. Sin embargo, requiere dl / import , que no se carga en JRuby:
$ jirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'tidy'
LoadError: no such file to load -- dl/import
¿Esta biblioteca está disponible para JRuby? Una búsqueda en la web reveló que no estaba disponible el año pasado .
Alternativamente, ¿alguien puede sugerir otras formas de limpiar el código HTML con formato incorrecto en JRuby?
Actualizar
Siguiendo la sugerencia de Markus, ahora uso Tidy a través de popen en lugar de libtidy. Publiqué el código que canaliza los datos del documento a través de tidy para futuras referencias. Con suerte, esto es robusto y portátil.
def clean(data)
cleaned = nil
tidy = IO.popen('tidy -f "log/tidy.log" --force-output yes -wrap 0 -utf8', 'w+')
begin
tidy.write(data)
tidy.close_write
cleaned = tidy.read
tidy.close_read
rescue Errno::EPIPE
$stderr.print "Running 'tidy' failed: " + $!
tidy.close
end
return cleaned if cleaned and cleaned != ""
return data
end
Solución
Puede usarlo desde la línea de comandos desde JRuby con % x {.. .}
o backticks. También puedes considerar popen
(y canalizar las cosas a través de él).
Tal vez no sea elegante, pero es más probable que te ayude con un mínimo de problemas que con tratar de meterte con bibliotecas no compatibles.