Как мне опустить элементы скрипта из HTML, используя XPath в Nokogiri в Ruby on Rails? - PullRequest
1 голос
/ 12 сентября 2011

Скажем, я начинаю со всего, что находится внутри элемента body:

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

, который содержит <script> и <noscript>. Как мне от них избавиться?

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

Возможно, вы захотите изменить выражение XPath на:

Nokogiri::HTML( doc ).xpath( "/html/body/node()[not(self::script or self::noscript)]" ).to_html
1 голос
/ 13 сентября 2011
#!/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>, удаляя их.

Разрыв между полученными *Теги 1013 * являются результатом возврата каретки в текстовых узлах, которые следуют за фактическими целевыми тегами.

...