我有一些使用Nokogiri的代码,我试图获取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>"
最后请注意,如果您不需要标记,只要求文本本身不包含HTML注释:
p doc.text #=> "hello world"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。