Ruby: изменить XML-файл за один проход - PullRequest
0 голосов
/ 12 октября 2010

Я пытаюсь прочитать поле RSS и добавить некоторые метаданные к каждому элементу в Ruby, выводя другой действительный канал RSS.

Я хотел бы сделать это за один проход, не читая весь канал RSS.в память по соображениям производительности, но я играл с libxml-ruby, и объект Reader, похоже, не способен распечатать текущий элемент, который он только что прочитал, что затрудняет циклический просмотр файла XML и печатькаждый элемент.

пример:

<rdf:RDF>
  <item>
    <description>foo</description>
  </item>
</rdf:RDF>

должен стать

<rdf:RDF>
  <item>
    <metadata>(some metadata about this item)</metadata>
    <description>foo</description>
  </item>
</rdf:RDF>

Я не привязан к libxml-ruby, но Nokogiri также построен на libxml икажется, имеет те же ограничения, и REXML кажется слишком медленным в соответствии с каждой статьей, которую я видел.

Любая помощь будет высоко ценится!

В противном случае, я думаю, пришло время для регулярных выражений ...

1 Ответ

0 голосов
/ 12 октября 2010

Просто начало.

f=0
File.readlines("file").each do |line|
  f=0 if line[/<\/rdf/]
  f=1 if line[/<rdf:RDF/]
  if f==1 and line["description"]
    line="<meta ...>\n" + line
  end
  puts line
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...