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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top