如何使用Nokogiri替换HTML节点

问题描述 投票:0回答:3

我有一个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崩溃并显示以下错误:

undefined method `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

这是Nokogiri错误,还是我做错了什么?

为此目的,add_childinner_html和其他设置程序也会发生相同的问题。

ruby-on-rails ruby nokogiri
3个回答
0
投票

我将引用您先前的问题的评论:

这是由于HTML的严格性((HTML具有一组预定义的元素)] >>。用Nokogiri :: XML(self.content)替换Nokogiri :: HTML(self.content),不要忘记稍后手动添加DOCTYPE声明。


0
投票

如果您查看日志,则用Nokogiri选择的部分将变为零。


0
投票

我无法重复这个问题。当然,这个问题很旧,但这可行:

© www.soinside.com 2019 - 2024. All rights reserved.