は、私はbody要素内のすべてで始まる言う:Ruby on RailsのNokogiriでXPathを使用してHTMLからスクリプト要素を削除するにはどうすればよいですか?
Nokogiri::HTML(doc).xpath("/html/body/node()").to_html
一部<script>
と<noscript>
が含まれています。どのようにこれらを取り除くのですか?あなたがあなたのXPath式を変更したい場合があります
は、私はbody要素内のすべてで始まる言う:Ruby on RailsのNokogiriでXPathを使用してHTMLからスクリプト要素を削除するにはどうすればよいですか?
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>
、私はCSSのアクセサを使用する鋸山の能力を使用していますXPathではなく、
doc.at('body').search('script,noscript').remove
し、それらを削除し、すべての<script>
と<noscript>
タグの内側に見える、<body>
タグの最初の出現を探します。
結果の<body>
タグ間のギャップは、実際のターゲットタグをたどったテキストノードのキャリッジリターンの結果です。
ありがとう、この答えは私のために働いた。 – Eric
あなたのHTMLをサニタイズ/浄化しようとしていますか? –
私はそれについては分かりませんが、ヘロクはコマンドラインツールをサポートしていないので、コマンドラインのXSLTコマンドをNokogiriに書き直そうとしています。 – Eric