如何在Ruby on Rails中使用Nokogiri中的XPath从HTML中省略脚本元素



假设我从body元素内的所有内容开始:

Nokogiri::HTML( doc ).xpath( "/html/body/node()" ).to_html

,其中包含一些<script><noscript>。我怎么去掉这些?

您可能希望将XPath表达式更改为:

Nokogiri::HTML( doc ).xpath( "/html/body/node()[not(self::script or self::noscript)]" ).to_html
#!/usr/bin/env ruby
require 'nokogiri'
html = <<EOT
<html>
  <head>
    <script>
      <!-- dummy script !>
    </script>
  </head>
  <body>
    <script><!-- dummy script !></script>
    <noscript>dummy script</noscript>
  </body>
</head>
EOT
doc = Nokogiri::HTML(html)

要点如下:

doc.at('body').search('script,noscript').remove
puts doc.to_xml
>> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
>> <html>
>> <head>
>> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
>> <script>
>>       <!-- dummy script !>
>>     </script>
>> </head>
>> <body>
>>     
>>   </body>
>> </html>

为简单起见,我使用Nokogiri使用CSS访问器的能力,而不是XPath。

doc.at('body').search('script,noscript').remove

查找第一次出现的<body>标签,然后查找所有<script><noscript>标签,并删除它们。

结果<body>标记之间的间隙是在实际目标标记后面的文本节点中回车的结果。

相关内容

  • 没有找到相关文章

最新更新