2013-08-27 3 views
18

Я использую Nokogiri для разбора страницы HTML с одинаковым содержанием:Как получить текст узла без детей?

<p class="parent"> 
    Useful text 
    <br> 
    <span class="child">Useless text</span> 
</p> 

Когда я вызываю метод возвращает page.css('p.parent').text Nokogiri «полезный текст Бесполезные текст». Но мне нужен только «Полезный текст».

Как получить текст узла без детей?

ответ

26

XPath включает в себя тест text() узла для выбора текстовых узлов, так что вы можете сделать:

page.xpath('//p[@class="parent"]/text()') 

Использование XPath для выбора HTML-классы могут стать весьма сложно, если рассматриваемый элемент может принадлежать более чем одному классу, поэтому это может быть не идеальным.

К счастью Nokogiri добавляет text() селектор в CSS, так что вы можете использовать:

page.css('p.parent > text()') 

, чтобы получить текстовые узлы, которые являются прямыми потомками p.parent. Это также вернет некоторые узлы, которые являются только whtespace, поэтому вам может потребоваться отфильтровать их.

+1

Селектор text() кажется самым чистым решением. Спасибо! –

0

Вы должны иметь возможность использовать page.css('p.parent').children.remove.

Тогда ваш page.css('p.parent').text вернет текст без узлов-узлов.

Примечание: page будет модифицирован remove

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