Почему эта команда Nokogiri удаляет HTML-теги? - PullRequest
3 голосов
/ 08 июля 2010

Это продолжение предыдущего вопроса . У меня проблемы с этим фрагментом Nokogiri:

>> require 'nokogiri'
>> html = 'bad<p>markup</p>with<img src="foo.jpg">'
>> Nokogiri::HTML(html).at_css('body').children.map {|x| '<p>' + x.text + '</p>'}.join('') 
=> "<p>bad</p><p>markup</p><p>with</p><p></p>"

Что случилось с моим тегом изображения? Похоже, что Nokogiri может убрать ВСЕ HTML-теги (включая мой оригинальный <p> вокруг слова «разметка») и заменить их. Как я могу предотвратить это? Все, что я хочу сделать, это убедиться, что текст без тегов обернут в <p> тег ...

1 Ответ

3 голосов
/ 08 июля 2010

Оборачивать элемент в теге p можно только в том случае, если это текстовый узел, в противном случае вызовите to_html для него:

require 'nokogiri'

html = 'bad<p>markup</p>with<img src="foo.jpg">'

Nokogiri::HTML(html).at_css('body').
children.map do |x|
  if x.text?
    '<p>' + x.text + '</p>'
  else
    x.to_html
  end
end.join('') 
#=> "<p>bad</p>\n<p>markup</p><p>with</p><img src=\"foo.jpg\">"
...