我正在尝试查找文档中要删除的元素。我能够使用类似这样的方式手动构建查询:
article.xpath("//*[@*[contains(., 'popular')]]", "//*[@*[contains(., 'comments')]]", "//*[@*[contains(., 'social-share')]]").each do |node|
node.remove
end
使用变量也可以:
line = 'related'
article.xpath("//*[@*[contains(., '#{line}')]]").each do |node|
node.remove
end
我想将所有单词添加到一个单独的文件中并循环该文件。我已经尝试了以下方法,但是它不起作用(静默故障-无输出)。
file = 'stop_words.txt'
File.readlines(file).each do |line|
article.xpath("//*[@*[contains(., '#{line}')]]").each do |node|
node.remove
end
end
该File.readlines(file).each
循环是工作的罚款。如果添加puts line
,它将从stop_words.txt打印列表。为什么article.xpath
循环不起作用?
文件中的每个“单词”末尾都包含一个换行符:
$ rm ~/test
$ printf "foo\nbar\nbaz" > ~/test
$ cat ~/test
foo
bar
baz
现在使用Ruby进行阅读:
words = File.readlines("#{Dir.home}/test")
=> ["foo\n", "bar\n", "baz"]
请注意,这些单词具有换行符,因此在执行此操作时:
article.xpath("//*[@*[contains(., '#{line}')]]")
您确实在做:
article.xpath("//*[@*[contains(., 'foo\n')]]")
最好的办法是使用chomp: true
具有.readlines
:
words = File.readlines("#{Dir.home}/test", chomp: true)
=> ["foo", "bar", "baz"]
我不能说这是否真的解决了潜在的问题。但是我可以肯定地说,这是您代码中必须解决的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句