2011-11-21 36 views
2

我的任务是获取没有数据的文档的HTML结构。来源:使用Nokogiri获取HTML结构

<html> 
    <head> 
    <title>Hello!</title> 
    </head> 
    <body id="uniq"> 
    <h1>Hello World!</h1> 
    </body> 
</html> 

我想:

<html> 
    <head> 
    <title></title> 
    </head> 
    <body id="uniq"> 
    <h1></h1> 
    </body> 
</html> 

有多种方式与引入nokogiri提取数据,但我无法找到一种方法执行相反的任务。

UPDATE: 找到解决的办法是我收到的两个答案的组合:

doc = Nokogiri::HTML(open("test.html")) 
    doc.at_css("html").traverse do |node| 
    if node.text? 
     node.remove 
    end 
    end 
    puts doc 

输出正是一个我想要的。

+0

可能重复[?如何创建使用引入nokogiri页面上的HTML代码结构的轮廓(http://stackoverflow.com/questions/7176094/how- do-i-create-an-html-tag-structure-on-the-page-using-nokogiri) – Phrogz

回答

1

Traverse该文件。对于每个节点,删除你不想要的东西。然后写出文件。

请记住,Nokogiri可以更改文档。 Doc

+0

谢谢Larry。我从url中读取了该页面。你会建议将整个页面源文件写入文件并从那里操作? – Yulia

+0

您的意思是在开始时加载文档?你可以直接从网址加载到nokogiri。请参阅[doc](http://nokogiri.org/tutorials/parsing_an_html_xml_document.html) –

4

这听起来像你想删除所有的文本节点。你可以这样做,像这样:

doc.xpath('//text()').remove 
puts doc 
+0

doc = Nokogiri :: HTML(open(“trial.html”)) puts doc.xpath('// text()') .remove 给出以下结果:您好!你好,世界!这是我想要的相反.. – Yulia

+0

我编辑了我的答案澄清。 – pguardiario