9
votes

Saisir du texte entre toutes les étiquettes de Nokogiri?

Quel serait le moyen le plus efficace de saisir tous les textes entre les balises HTML? xxx

tas de textes entourés de tags html.


1 commentaires

4 Réponses :


26
votes
doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").to_s

0 commentaires

5
votes

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


2 commentaires

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.



1
votes

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


0 commentaires

2
votes

juste faire:

doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").text


0 commentaires