Domanda
Dopo aver trascorso alcune ore con Ruby Debugger, ho finalmente appreso che ho bisogno di ripulire alcune pagine HTML non valide prima di poterle inviare a Hpricot. La migliore soluzione che ho trovato finora è la interfaccia Tidy Ruby .
Tidy funziona alla grande dalla riga di comando e anche l'interfaccia di Ruby funziona. Tuttavia, richiede dl / import , che non viene caricato in JRuby:
$ jirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'tidy'
LoadError: no such file to load -- dl/import
Questa libreria è disponibile per JRuby? Una ricerca web ha rivelato che non era disponibile l'anno scorso .
In alternativa, qualcuno può suggerire altri modi per ripulire HTML non valido in JRuby?
Aggiornamento
Seguendo il suggerimento di Markus ora uso Tidy tramite popen anziché libtidy. Ho pubblicato il codice che reindirizza i dati del documento in ordine per riferimento futuro. Speriamo che sia robusto e portatile.
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
Soluzione
Puoi usarlo dalla riga di comando da JRuby con % x {.. .}
o backtick. Puoi anche prendere in considerazione popen
(e reindirizzare le cose).
Forse non è elegante, ma è più probabile che ti faccia andare con il minimo fastidio che cercare di pasticciare con librerie non supportate.