Ruby 使用Nokogiri快速解析XML
我正在用Ruby和Nokogiri解析一个XML文件,但在执行时间上有一些问题。4000行需要一分钟——太多了。我试图找到一些代码优化的想法 这是代码的一个示例:Ruby 使用Nokogiri快速解析XML,ruby,nokogiri,Ruby,Nokogiri,我正在用Ruby和Nokogiri解析一个XML文件,但在执行时间上有一些问题。4000行需要一分钟——太多了。我试图找到一些代码优化的想法 这是代码的一个示例: input = Nokogiri::XML(File.open(file_name)) input.xpath('//Transition').each do |transition_record| from = transition_record.xpath('@From') to = transition_record.x
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中不是固定的位置,可以是任何级别。另外,我正在以某种方式解析另外三个标记
有人知道我如何改进它吗?你可以重新组织你的代码,这样你就可以用Nokogiri创建一个散列数组,然后你就可以直接在
create
中使用它们了。这将允许您分别为每个部分计时。我想你会发现Nokogiri不是问题所在。Nokogiri速度相当快。我认为你的模型/数据库首先是个问题,我没有考虑过。实际上,使用postgr而不是litesql,一切都会更好。谢谢对于这类问题,提供一个小的XML示例也是一个很大的帮助。如果没有它,您将要求我们推断,或者根据您的代码构建一个工作示例,这通常不会很好地工作。