2011-07-08 91 views
0

使用Nokogiri,我將如何移除一切直至幷包括HTML文檔的body元素?還有關閉的身體元素和一切之後?使用Nokogiri去除元素

+0

如果你正在清理一個文件,刪除整個機構,創建一個新文件可能是有意義的,只能複製舊文件的''。這樣做是同一枚硬幣的另一面。 –

回答

3

最簡單的方法(當然,恕我直言)是使用XPath來提取<body>元素:

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

@邁克爾:在一兩分鐘內,一羣新的眼睛能夠理清你的問題時,試圖強制它工作的時間很難被鎖定在錯誤的方法和浪費時間。在那裏,做到這一點,甚至沒有得到一件蹩腳的T恤。 –

+2

而不是使用'to_s'來獲取HTML,請使用'to_html'。它更自我記錄。另外,在使用HTML時,我使用CSS訪問器而不是XPath,'at'返回一個節點而不是'xpath',它返回一個NodeSet,用於顯式查找單個標籤,例如''或'' ,所以'body = doc.at('body')'和'body_html = body.to_html'。 –