Анализ больших XML-файлов с помощью Ruby и Nokogiri

У меня есть большой файл XML (около 10 тыс. строк), который мне нужно регулярно анализировать в следующем формате:

<summarysection>
    <totalcount>10000</totalcount>
</summarysection>
<items>
     <item>
         <cat>Category</cat>
         <name>Name 1</name>
         <value>Val 1</value>
     </item>
     ...... 10,000 more times
</items>

Что я хотел бы сделать, так это разобрать каждый из отдельных узлов с помощью nokogiri. для подсчета количества предметов в одной категории. Затем я хотел бы вычесть это число из total_count, чтобы получить вывод, который гласит: «Count of Interest_Category: n, Count of All Else: z».

Вот мой код:

#!/usr/bin/ruby

require 'rubygems'
require 'nokogiri'
require 'open-uri'

icount = 0 
xmlfeed = Nokogiri::XML(open("/path/to/file/all.xml"))
all_items = xmlfeed.xpath("//items")

  all_items.each do |adv|
            if (adv.children.filter("cat").first.child.inner_text.include? "partofcatname")
                icount = icount + 1
            end
  end

othercount = xmlfeed.xpath("//totalcount").inner_text.to_i - icount 

puts icount
puts othercount

Кажется, это работает, но очень медленно! Я говорю более 10 минут для 10000 элементов. Есть лучший способ сделать это? Я делаю что-то менее чем оптимальным образом?

8
задан Phrogz 15 May 2012 в 05:27
поделиться