我有一些使用Nokogiri的代码,我试图在没有得到评论的情况下获得inner_html
。从inner_html删除评论
html = Nokogiri::HTML(open(@sql_scripts_url[1])) #using first value of the array
html.css('td[class="ms-formbody"]').each do |node|
puts node.inner_html # prints comments
end
我有一些使用Nokogiri的代码,我试图在没有得到评论的情况下获得inner_html
。从inner_html删除评论
html = Nokogiri::HTML(open(@sql_scripts_url[1])) #using first value of the array
html.css('td[class="ms-formbody"]').each do |node|
puts node.inner_html # prints comments
end
既然你没有提供任何样本HTML或所需的输出,这里有一个通用的解决方案:
您可以选择使用comment()
节点测试中的XPath SGML的意见;您可以通过在所有评论节点上调用.remove
将它们从文档中删除。说明:
require 'nokogiri'
doc = Nokogiri.XML('<r><b>hello</b> <!-- foo --> world</r>')
p doc.inner_html #=> "<b>hello</b> <!-- foo --> world"
doc.xpath('//comment()').remove
p doc.inner_html #=> "<b>hello</b> world"
请注意,上述修改文件破坏性地删除评论。如果您想保留原始文件未经修改的,你可以交替做:
class Nokogiri::XML::Node
def inner_html_reject(xpath='.//comment()')
dup.tap{ |shadow| shadow.xpath(xpath).remove }.inner_html
end
end
doc = Nokogiri.XML('<r><b>hello</b> <!-- foo --> world</r>')
p doc.inner_html_reject #=> "<r><b>hello</b> world</r>"
p doc.inner_html #=> "<r><b>hello</b> <!-- foo --> world</r>"
最后要注意的是,如果你不需要的标记,只是要求对于text
本身不包含HTML注释:
p doc.text #=> "hello world"
请提供一个示例HTML代码段,以及在按摩后您想要的结果字符串。 – Phrogz
我只需要从我的html中删除像“<! - WHAT EVER - >”这样的HTML注释。我使用了strip并且它工作。我不知道这是否正确。 – Maverick