2014-10-26 3 views
0

Мне нужно просмотреть весь текст в документе HTML, который был разобран с помощью Nokogiri. Здесь мой код:Как обрабатывать весь HTML-документ, обработанный Nokogiri

agent = Mechanize.new 
page = agent.get('http://www.example.com').parser.search('//*[translate(text(),"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz") = *]').to_html 

В коде нет такой ошибки; он выполняется без ошибок. Однако, если я зашел и проверил случайный тег в документе, дело все равно будет таким же, как и раньше. Есть ли другой/лучший способ удалить весь текст в документе?

+2

Добавить .downcase следующего to_html? – daremkd

+0

@ daremkd: Нет, не работает. – Severin

+0

to_html создает строку и добавляет нижний предел рядом с_html, поэтому это to_html.downcase сделает всю строку в нижнем регистре. Что вы пытаетесь сделать в точности, просто попробуйте сделать текстовый файл (между тегами) или сделать все в нижнем регистре, включая теги? Можете ли вы привести пример? – daremkd

ответ

1

Вы можете использовать traverse для downcase всех текстовых узлов:

require 'open-uri' 
require 'nokogiri' 

doc = Nokogiri::HTML(open("http://www.example.com/")) 
doc.traverse do |node| 
    node.content = node.content.downcase if node.text? 
end 

puts doc.to_html 

Выход:

<!DOCTYPE html> 
<html> 
<head> 
    <title>example domain</title> 

    <meta charset="utf-8"> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <style type="text/css"> 
    body { ... } 
    </style> 
</head> 

<body> 
<div> 
    <h1>example domain</h1> 
    <p>this domain is established to be used for illustrative examples in documents. you may use this 
    domain in examples without prior coordination or asking for permission.</p> 
    <p><a href="http://www.iana.org/domains/example">more information...</a></p> 
</div> 
</body> 
</html> 
+0

Приятный трюк, большое спасибо за обмен :) – Severin

Смежные вопросы