Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用Nokogiri快速解析XML_Ruby_Nokogiri - Fatal编程技术网

Ruby 使用Nokogiri快速解析XML

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

我正在用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.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示例也是一个很大的帮助。如果没有它,您将要求我们推断,或者根据您的代码构建一个工作示例,这通常不会很好地工作。