Обновить один объект XML с помощью Hpricot в Ruby? - PullRequest
0 голосов
/ 07 декабря 2009

Я собираюсь использовать Hpricot для обработки файла XML. Я хочу, чтобы в случайном порядке отображались некоторые цитаты из файла, а затем я хочу отслеживать частоту отображения каждой цитаты. Могу ли я обновить один элемент в файле XML с помощью Hpricot (или есть какое-то другое решение, которое может сделать это для меня?), Или я должен просто переписывать весь файл XML каждый раз, когда отображается элемент?

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Раньше я работал с нокогири вместо hpricot (это значительно быстрее).

Я сделал что-то вроде этого:

#!/usr/bin/env ruby
require 'rubygems'
require 'nokogiri'

FNAME = "/home/kirill/books.xml"

doc = Nokogiri::XML(open(FNAME))

doc.search('title').each {|node|
  node.content=node.content.reverse
}

File.new(FNAME,'w').write doc unless doc.validate

У вас есть такой большой файл, который будет слишком медленным?

Или ты хочешь что-то еще, чего я не понял?

0 голосов
/ 08 декабря 2009

Я вижу пару решений:

  1. Разобрать файл один раз, сохранить его в БД и использовать дополнительные атрибуты viewed для отслеживания.
  2. Если БД недоступна, проанализируйте ее один раз и сохраните Yaml. Проще разбирать, читать и писать обратно. Сэкономит вам драгоценное время выполнения каждый раз.

Если вы продолжаете обновлять файл или синхронизировать файл с удаленным сервером, то лучше всего хранить информацию в БД.

...