2011-07-08 63 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'。 –