Интересует ваш источник (я удалил атрибуты для ясности):
<div>
<div>
<p>
<b>
<span>From:</span>
</b>
<span> EMAIL SENDER NAME [mailto:EMAILADDRESS@FAKE.COM] <br>
<b>Sent:</b>!! DATE I NEED TO GRAB HERE !! <br>
<b>To:</b> EMAIL ADDRESS HERE <br>
<b>Subject:</b> SUBJECT LINE HERE <p></p>
</span></p></div></div>
Обратите внимание, что теги br
в HTML являются самозакрывающимися, поэтому искать их бессмысленноих дочерние элементы.
Цель может быть описана с помощью css div div p span
, но обратите внимание, что есть два узла, которые соответствуют этому, и at_css
возвращает first .Вы можете использовать div div p>span
для указания только span
s, которые являются непосредственными дочерними элементами в p
.Фактическая цель - текстовый узел внутри этого элемента (теперь в документе только один совпадающий диапазон).В частности, это следующий элемент после первого тега b
.Поэтому, если мы расширим селектор css до div div p>span b
, мы можем использовать метод Nokogiri next
, чтобы получить целевую строку:
date_string = @doc.at_css('div div p>span b').next
Если вы хотите другие поля, вы можете использовать css
вместоиз at_css
:
date_string = @doc.css('div div p>span b')[0].next
to_string = @doc.css('div div p>span b')[1].next
subject_string = @doc.css('div div p>span b')[2].next
Я оставлю вам имя отправителя, чтобы вы могли что-то сделать!