2011-07-08 14 views
0

Nokogiriを使用して、HTML文書のbody要素までをすべて削除しますか?また、閉じたボディ要素とその後のすべて?Nokogiriで要素を削除する

+0

本文を削除して本文全体を削除した場合、新しい文書を作成して古い文書の「」のみをコピーすると意味があります。そのようにすることは、同じコインの反対側です。 –

答えて

3

(もちろん私見)が<body>要素を抽出するためにXPathを使用することです最も簡単な方法:

html = '<html><head><title>xxx</title></head><body><p>dsfkj</p><p><b>sdff</b> dsfsdf</p></body></html>' 
doc = Nokogiri::HTML(html) 
body = doc.xpath('//body') 

は今、あなただけの<body>要素(およびその子を)持っているbodyに。次に、HTMLを取得する:

body_html = body.to_s 
# "<body>\n<p>dsfkj</p>\n<p><b>sdff</b> dsfsdf</p>\n</body>" 

トリックは、あなたが望んでいないものを捨てようとするのではなく、あなたが望むものを抽出することです。最終結果は同じですが、クエリー言語を自由に使いたいときに望ましくないものを見つけ出すよりも簡単なものを見つけることができます。

+0

これはとてもシンプルなので、私はそれを考えなかったと信じられません!ありがとう! –

+1

@Michael:間違ったアプローチに縛られて、新鮮な目で数分間で問題を解決できるときには、強制的に動作させるのは非常に簡単です。そこには、それを行った、それのためにっぽいTシャツを取得していない。 –

+2

「to_s」を使用してHTMLを取得するのではなく、「to_html」を使用します。それはもっと自己文書化しています。また、HTMLを使って作業する場合は、XPathではなくCSSアクセサーを使用し、 ' 'や' 'などの単一タグの明示的な参照のためにNodeSetを返す 'xpath'ではなくノードを返す' at'を使用します。 、 'body = doc.at( 'body')'と 'body_html = body.to_html'です。 –

関連する問題