2011-09-12 10 views
1

は、私はbody要素内のすべてで始まる言う:Ruby on RailsのNokogiriでXPathを使用してHTMLからスクリプト要素を削除するにはどうすればよいですか?

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

一部<script><noscript>が含まれています。どのようにこれらを取り除くのですか?あなたがあなたのXPath式を変更したい場合があります

+0

あなたのHTMLをサニタイズ/浄化しようとしていますか? –

+0

私はそれについては分かりませんが、ヘロクはコマンドラインツールをサポートしていないので、コマンドラインのXSLTコマンドをNokogiriに書き直そうとしています。 – Eric

答えて

2

:ここ

Nokogiri::HTML(doc).xpath("/html/body/node()[not(self::script or self::noscript)]").to_html 
1
#!/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> 

、私はCSSのアクセサを使用する鋸山の能力を使用していますXPathではなく、

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

し、それらを削除し、すべての<script><noscript>タグの内側に見える、<body>タグの最初の出現を探します。

結果の<body>タグ間のギャップは、実際のターゲットタグをたどったテキストノードのキャリッジリターンの結果です。

+0

ありがとう、この答えは私のために働いた。 – Eric

関連する問題