Ruby - запись данных Hpricot в файл - PullRequest
1 голос
/ 02 июня 2010

В настоящее время я выполняю некоторый синтаксический анализ XML, и я решил использовать Hpricot из-за его простоты использования и синтаксиса, однако я сталкиваюсь с некоторыми проблемами. Мне нужно записать фрагмент данных XML, который я обнаружил, в другой файл. Однако, когда я делаю это, формат не сохраняется. Например, если содержимое должно выглядеть следующим образом:

<dict>
  <key>item1</key><value>12345</value>
  <key>item2</key><value>67890</value>
  <key>item3</key><value>23456</value>
</dict>

И при условии, что в документе много таких записей. Я перебираю элементы 'dict', используя

hpricot_element = Hpricot(xml_document_body)
f = File.new('some_new_file.xml')
(hpricot_element/:dict).each { |dict| f.write( dict.to_original_html ) }


После использования приведенного выше кода, я ожидаю, что результат будет выглядеть следующим образом, точно так же, как XML, показанный выше. Однако, к моему удивлению, вывод файла выглядит примерно так:

<dict>\n", "    <key>item1</key><value>12345</value>\n", "    <key>item2</key><value>67890</value>\n", "    <key>item3</key><value>23456</value\n", "  </dict>


Я попытался разбить символы "\ n" и записать в файл по одной строке за раз, но, похоже, это тоже не сработало, поскольку не распознало символы "\ n". Любая помощь очень ценится. Это может быть очень простое решение, но я не могу найти его. Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июня 2010

Мое решение состояло в том, чтобы просто заменить буквенные символы '\ n' на разрывы строк и убрать лишнюю пунктуацию, просто добавив два gsub, которые выглядели следующим образом:

f.write( dict.to_original_html.gsub('\n', "\n").gsub('" ,"', '') )


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

0 голосов
/ 03 июня 2010
hpricot_element = Hpricot::XML(xml_document_body)

File.open('some_new_file.xml', 'w') {|f| f.write xml_document_body }

Не используйте анализатор xml, если вы хотите, чтобы был написан оригинальный xml. Это ненужно. Вы все равно должны использовать его, если хотите продолжить обработку данных.

Также для XML вы должны использовать Hpricot::XML вместо просто Hpricot.

...