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