У меня есть большой файл 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 элементов. Есть лучший способ сделать это? Я делаю что-то менее чем оптимальным образом?