2011-11-21 38 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