Разбор внутренних тегов с помощью Nokogiri - PullRequest
0 голосов
/ 23 мая 2011

Я не могу разобрать неправильно встроенные теги HTML.Есть ли способ удалить все html-теги из узла и сохранить весь текст?

Я использую код:

rows = doc.search('//table[@id="table_1"]/tbody/tr')

details = rows.collect do |row|
  detail = {}
  [
    [:word, 'td[1]/text()'],
    [:meaning, 'td[6]/font'],
  ].collect do |name, xpath|
      detail[name] = row.at_xpath(xpath).to_s.strip
    end
  detail
end

Используя Xpath:

[:meaning, 'td[6]/font']

генерирует

:meaning: ! '<font size="3">asking for information specifying <font
    color="#CC0000" size="3">what is your name?</font> /what/ as in, <font color="#CC0000" size="3">I'm not sure what you mean</font>
    /what/ as in <a style="text-decoration: none;" href="http://somesecretlink.com">what</a></font>

С другой стороны, используя Xpath:

'td/font/text()'

генерирует

:meaning: asking for information specifying

, игнорируя все дочерние узлы.Чего я хочу добиться, так это

:meaning: asking for information specifying what is your name? /what/ as in, I'm not sure what you mean /what/ as in what? I can't hear you

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

Я добавил ответ на этот же вопрос на днях.Это очень простой процесс.

Взгляните на: Преобразование HTML в простой текст и сохранение структуры / форматирования с помощью ruby ​​

0 голосов
/ 23 мая 2011

Это зависит от того, что вам нужно извлечь.Если вам нужен весь текст в элементах шрифта, вы можете сделать это с помощью следующего xpath:

'td/font//text()'

Извлекает все текстовые узлы в тегах шрифта.Если вы хотите все текстовые узлы в ячейке, то:

'td//text()'

Вы также можете вызвать метод text на узле Нокогири:

row.at_xpath(xpath).text
...