Странные проблемы с Нокогири - PullRequest
0 голосов
/ 10 августа 2010

Скажем, у нас есть HTML, в котором все ...

<div class="replace-me">
</div>

... необходимо заменить на

<video src='my_video.mov'></video>

Код следующий:

doc.css("div.replace-me").each do |div|
  div.replace "<video src='my_video.mov'></video>"
end

Это просто, но, к сожалению, у меня это не работает. Nokogiri вылетает с ошибкой:

неопределенный метод children' for nil:NilClass /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in method_missing ' /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.2/lib/nokogiri/html/document_fragment.rb:16:in initialize' /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.2/lib/nokogiri/xml/node.rb:424:in new ' /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.2/lib/nokogiri/xml/node.rb:424:in fragment' /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.2/lib/nokogiri/xml/node.rb:776:in coerce ' /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.2/lib/nokogiri/xml/node.rb:331:in `replace '

Замена на примитивный div работает:

doc.css("div.replace-me").each do |div|
  div.replace "<div>Test</div>"
end

Это ошибка Нокогири, или я что-то не так делаю?

PS: та же проблема с "add_child", "inner_html" и другими сеттерами для этой цели

Ответы [ 2 ]

0 голосов
/ 24 января 2018

Если вы загляните в журнал, та часть, которую вы выбрали с помощью nokogiri, обнулится.

Попробуете ли вы таким образом?

doc.css(".replace-me").each do |div|
 div.replace "<video src='my_video.mov'></video>"
end

Или вам может понадобиться указать, какой элемент вы хотите заменить.

0 голосов
/ 10 августа 2010

Я процитирую свой комментарий к вашему предыдущему вопросу:

Это происходит из-за строгости HTML (HTML имеет предопределенный набор элементов) .Замените Nokogiri :: HTML (self.content) на Nokogiri :: XML (self.content) и не забудьте позже добавить объявление DOCTYPE вручную.

...