Question

Après avoir passé quelques heures avec Ruby Debugger, j’ai finalement appris que je devais nettoyer certaines pages HTML mal formées avant de pouvoir les transmettre à Hpricot. La meilleure solution que j'ai trouvée jusqu'à présent est l'interface Tidy Ruby .

Tidy fonctionne très bien à partir de la ligne de commande et de l'interface Ruby. Cependant, il nécessite dl / import , qui ne se charge pas dans JRuby:

$ jirb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'tidy'
LoadError: no such file to load -- dl/import

Cette bibliothèque est-elle disponible pour JRuby? Une recherche sur le Web a révélé que il n'était pas disponible l'an dernier .

Sinon, quelqu'un peut-il suggérer d'autres moyens de nettoyer le code HTML mal formé dans JRuby?

Mettre à jour

Suivant la suggestion de Markus, j'utilise maintenant Tidy via popen au lieu de libtidy. J'ai posté le code qui achemine les données du document vers Pordy pour référence future. J'espère que c'est robuste et portable.

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
Était-ce utile?

La solution

Vous pouvez l'utiliser depuis la ligne de commande depuis JRuby avec % x {.. .} ou des backticks. Vous pouvez également vouloir considérer popen (et diriger les éléments à travers celui-ci).

Ce n'est peut-être pas élégant, mais il est plus susceptible de vous entraîner avec un minimum de tracas que d'essayer de jouer avec des bibliothèques non prises en charge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top