Kev*_*ope 3 ruby-on-rails nokogiri
我在Rails中与Nokogiri有一点奇怪的问题.我正在尝试删除带有"为什么"类的"p"标记.我有以下代码,但不起作用:
def test_grab
f = File.open("public/test.html")
@doc = Nokogiri::HTML.parse(f)
f.close
@doc = @doc.css("p")
@doc.each do |p|
if p["class"] == "why"
logger.info p.values
p.remove
end
end
end
Run Code Online (Sandbox Code Playgroud)
的test.html:
<html>
<head>
<title>Test</title>
</head>
<body>
<p>Test data</p>
<p>More <a href="http://stackoverflow.com">Test Data</a></p>
<p class="why">Why is this still here?</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
输出html源:
<p>Test data</p>
<p>More <a href="http://stackoverflow.com">Test Data</a></p>
<p class="why">Why is this still here?</p>
Run Code Online (Sandbox Code Playgroud)
我知道rails代码进入if循环,因为logger.info出现在服务器终端上.
有任何想法吗?
您是否有任何理由重复使用@doc实例变量?
在对这样的事情进行故障排除时,我发现最好的想法是尝试在没有Rails开销的情况下评估相同的代码.例如:
require 'nokogiri'
doc = Nokogiri::HTML(DATA)
doc.css("p").each do |p|
p.remove if p["class"] == "why"
end
__END__
<html>
<head>
<title>Test</title>
</head>
<body>
<p>Test data</p>
<p>More <a href="http://stackoverflow.com">Test Data</a></p>
<p class="why">Why is this still here?</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
哪个回报:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><title>Test</title></head>
<body>
<p>Test data</p>
<p>More <a href="http://stackoverflow.com">Test Data</a></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
现在尝试做paragraphs = @doc.css("p"),然后paragraphs.each ..或只是省略整个任务,就像我上面.
| 归档时间: |
|
| 查看次数: |
1714 次 |
| 最近记录: |