2014-12-15 3 views
0

У меня есть ситуация, когда я хочу получить родительский текст тега <p>. Например:Как получить текст родителя с помощью Nokogiri

<p> 
    <a name="TOPIC"></a> 
    <b><font color="#800000" size="4" face="Arial">Exapmles</font></b> 
</p> 

Это работает отлично для этого примера:

test = Nokogiri::HTML("row['test']"]) 
raw_attributes = test.root.css("p a").inject({}) do |accumulator, element| 
    accumulator[element.attr("name")] = (element.parent.text).strip 
    accumulator 
end 

Но это не работает в следующем примере:

<p> 
    <font> 
    <a name="TOPIC"></a> 
    <b><font color="#800000" size="4" face="Arial">Exapmles</font></b> 
    </font> 
</p> 

Как я могу это сделать с помощью Nokogiri? Я хочу решение, которое работает для обоих вышеупомянутых двух условий.

ответ

2
puts doc.at_xpath("//p[//a[@name='TOPIC']]").inner_text.strip 
#=> "Exapmles" 

декодированного, это говорит:

  • //p - найти p элемент в любом месте документа
    • […] - что соответствует этому условию
    • //a - это имеет a элемент в виде потолочный
      • [@name='TOPIC'] - с атрибутом name, значение которого равно TOPIC.
Смежные вопросы