Quel serait le moyen le plus efficace de saisir tous les textes entre les balises HTML? tas de textes entourés de tags html. p> p>
4 Réponses :
doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").to_s
Utilisez un analyseur SAX. Beaucoup plus rapide que l'option XPath.
require "nokogiri"
some_html = <<-HTML
<html>
<head>
<title>Title!</title>
</head>
<body>
This is the body!
</body>
</html>
HTML
class TextHandler < Nokogiri::XML::SAX::Document
def initialize
@chunks = []
end
attr_reader :chunks
def cdata_block(string)
characters(string)
end
def characters(string)
@chunks << string.strip if string.strip != ""
end
end
th = TextHandler.new
parser = Nokogiri::HTML::SAX::Parser.new(th)
parser.parse(some_html)
puts th.chunks.inspect
Comment cela pourrait-il être changé pour seulement obtenir du texte entre la seule étiquette du corps?
Définissez un drapeau et commencez uniquement à capturer des caractères une fois que vous voyez la balise de carrelage et arrêtez de capturer après la fermeture de la balise.
Voici comment obtenir tout le texte de la question de cette page:
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://stackoverflow.com/questions/1512850/grabbing-text-between-all-tags-in-nokogiri"))
puts doc.css("#question").to_s
juste faire:
doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").text
Découvrez GITUB.COM/RGROVE/Sanitize aussi