Nokogiri查询JavaScript中包含的HTML注释?

时间:2013-03-12 00:50:20

标签: ruby xpath nokogiri

我有以下HTML并且我试图在脚本节点中获取注释:

<html>
    <head>
        <script language="JavaScript" type="text/javascript">
            <!--
            url = 'http://someurl.com';
            -->
        </script>
    </head>
</html>

使用它,我得到脚本节点:

javascript_code = doc.xpath("/html/head/script")

但是,在向xpath添加comments()时,它不会返回任何内容:

javascript_code = doc.xpath("/html/head/script/comment()")

我不知道为什么这不起作用,看起来应该很简单。有可能得到评论吗?

1 个答案:

答案 0 :(得分:2)

如果您将文档解析为XML,它将找到注释。但是,如果您将其解析为HTML,Nokogiri会将脚本标记的全部内容放入cdata部分。然后你可以解析它。

require 'rubygems'
require 'nokogiri'

body = DATA.read

doc = Nokogiri::XML(body)
puts doc.search('/html/head/script/comment()').text.strip 
# puts "url = 'http://someurl.com';"

doc = Nokogiri::HTML(body)
puts doc.search('/html/head/script').text.strip 
# puts "<!--\n            url = 'http://someurl.com';\n            -->"


__END__
<html>
    <head>
        <script language="JavaScript" type="text/javascript">
            <!--
            url = 'http://someurl.com';
            -->
        </script>
    </head>
</html>