Quel serait le moyen le plus efficace de saisir tous les textes entre les balises html?saisissant le texte entre toutes les étiquettes dans Nokogiri?
<div>
<a> hi </a>
....
ensemble de textes entourés de balises html.
Quel serait le moyen le plus efficace de saisir tous les textes entre les balises html?saisissant le texte entre toutes les étiquettes dans Nokogiri?
<div>
<a> hi </a>
....
ensemble de textes entourés de balises html.
doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").to_s
merci! Fonctionne bien +1 – rusllonrails
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 obtenir uniquement du texte entre les balises body? – Omnipresent
Définissez un indicateur et ne commencez à capturer des caractères qu'après avoir vu le tag de corps commencer et arrêter la capture après la fermeture du tag de corps. –
Voici comment obtenir tout le texte dans la div 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
Il suffit de faire:
doc = Nokogiri::HTML(your_html)
doc.xpath("//text()").text
Check out https://github.com/rgrove/ assainir aussi – Abram