說我先從body元素中的一切:如何在Ruby on Rails中使用Nokogiri中的XPath忽略HTML腳本元素?
Nokogiri::HTML(doc).xpath("/html/body/node()").to_html
其中包含了一些<script>
和<noscript>
。我如何擺脫這些?
說我先從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>
爲簡單起見,我使用的引入nokogiri的使用CSS存取能力而不是XPath。
doc.at('body').search('script,noscript').remove
將查找<body>
標籤的第一次出現,然後查找裏面的所有<script>
和<noscript>
標記,刪除它們。
由此產生的<body>
標記之間的差距是文本節點中跟蹤實際目標標記的回車的結果。
謝謝,這個答案也適用於我。 – Eric
您是否試圖淨化/淨化您的HTML? –
我對HTML的回答不夠全面,但我試圖將一些命令行XSLT命令重寫爲Nokogiri,因爲Heroku不支持命令行工具。 – Eric