2011-06-30 25 views
1

如何解析嵌套的UL /李標籤我有以下的HTML結構使用角度來說,Hpricot

<div id='my_categories'> 
    <ul> 
    <li><a href="1">Animals, Birds, & Pets</a></li> 
    <li><a href="2">Ask the Expert</a> 
     <ul> 
     <li><a href='21'>Health Care Providers</a></li> 
     <li><a href='22'>Influnza</a> 
      <ul> 
      <li><a href='221'>Flu Viruses (2)</a></li> 
      <li><a href='222'>Test</a></li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    </ul> 
    </div> 

這是web頁面的外觀

enter image description here

我需要什麼,我有一個分類表字段category_name,category_url和parent_id。

我需要保存每個類別和子類別。 parent_id表示該子類別屬於哪個類別。

如何使用此Hpricot解析此HTML結構並將數據保存到我的數據庫中。請幫助

我的表看起來像

id category_name    category_url Parent_id 
    1 Animals, Birds, & Pets  null   null 
    2 Ask the expert    null   null 
    3 Health Care Providers  null   2 
    4 Influenza     null   2 
    5 Flu Viruses    null   4 
    6 Test      null   4 

在此先感謝

+0

什麼'parent_id'?請給出一個想要的輸出的例子。 –

+0

喬納斯我已經更新了我的問題,我的表格值如何。希望這清除你的疑問。 –

回答

1

下面是爲我工作的代碼...

doc = Hpricot(open(categories_page).read) 
    doc.search("ul/li").each do |li| 
    category = li.search('a[@href]').first.inner_text.gsub(/ *\(.*?\)/, '') 
    category_url = li.search('a').first[:href] 
    category = Category.find_or_create_by_name(category, :url => category_url) 

    puts "---------- #{category.name} ------------" 
    nodes = li.search("ul/li/a") 
    unless nodes.empty? 
     nodes.each do |node| 
     node_name = node.inner_text.gsub(/ *\(.*?\)/, '') 
     node_url = node.attributes['href'] 
     sub_category = Category.find_by_name(node_name) 
     if sub_category.blank? 
      sub_category = Category.create(:name => node_name, :url => node_url, :parent_category_id => category.id) 
      puts " #{sub_category.name}" 
     else 
      sub_category.update_attribute('parent_category_id', category.id) 
      puts " #{category.name} --> #{sub_category.name}" 
     end 
     end 
    end  
    end 
相關問題