2015-08-14 2 views
1

Я использую Ruby & Nokogiri для разбора html на странице.Получить внутренний текст ближайшего родителя тег

<div><a href="#" title="firstTitle">text one</a></div> 

    <p class="OK">some content</p> 
    <p class="OK">some content</p> 

<div><a href="#" title="secondTitle">text two</a></div> 

    <p class="WARNING">some content</p> 
    <p class="WARNING">some content</p> 

<div><a href="#" title="thirdTitle">text three</a></div> 

    <p class="CRITICAL">some content</p> 
    <p class="CRITICAL">some content</p> 

Скажем, я хочу, чтобы найти пункты с классом WARNING, я могу сделать это успешно с:

doc = Nokogiri::HTML(html) 
warning = doc.css('p.WARNING') 

Но теперь я хочу, чтобы предназначаться внутренний текст ближайшего родительского a тега, в в этом случае он вернется text two.

Я пробовал использовать .first.parent.name и previous_element среди других вариантов, но не был успешным и был бы признателен за понимание. Благодаря!

+0

Вы можете использовать 'previous_element' работать свой путь в обратном направлении до тех пор, вы видите 'div'. –

ответ

1

Вы можете использовать ось XPath preceding-siblng, чтобы найти конкретный элемент сиблинга перед элементом контекста. Например, учитывая контекст элемент <p>, вы можете попробовать что-то вроде следующего, чтобы получить ближайшие предшествующие двойники div, а затем возвращают соответствующий a элемент:

link = warning.at_xpath('./preceding-siblng::div[1]/a') 
+0

Спасибо! Это выглядит многообещающим, как только я реализую и тестирую, я соглашусь в случае успеха. – nextstep

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