2012-11-21 127 views
1

我使用Ruby和Nokogiri解析XML文件,但是執行時間有一些問題。 4000線需要一分鐘 - 這太多了。我試圖找到代碼優化的一些想法。使用Nokogiri進行快速XML解析

這是代碼的示例:

input = Nokogiri::XML(File.open(file_name)) 
input.xpath('//Transition').each do |transition_record| 
    from = transition_record.xpath('@From') 
    to = transition_record.xpath('@To') 
    name = transition_record.xpath('@Name') 
    Transition.create do |transition| 
    transition.from_id = from.to_s 
    transition.to_id = to.to_s 
    transition.name = name.to_s 

    if transition_record.at_xpath('Condition').at_xpath('@Type') 
     transition.condition = transition_record.at_xpath('Condition').at_xpath('@Type').to_s 
    end 
    end 
end 

Transition不是在XML地方固定的地方,並且可以在任何級別。另外,我以某種方式解析其他三個標籤。

有沒有人有任何想法,我可以改善它?

+2

Nokogiri相當快。我會首先看你的模型/數據庫。 – pguardiario

+0

我沒想過。真的,用postgr而不是litesql一切都好。謝謝! –

+0

對於這類問題,提供XML的一小部分樣本也是很有幫助的。沒有它,你會要求我們推斷,或者從你的代碼中構建一個工作示例,這通常不能很好地工作。 –

回答

0

您可以重新組織代碼,以便使用Nokogiri創建散列數組,然後您可以直接在create中使用它們。這將允許您分開計時每個部分。我想你會發現Nokogiri不是問題。