Как я могу преобразовать файл CSV в XML?

Как я могу преобразовать файл CSV в XML?

Есть ли программное обеспечение для Ubuntu?

5 ответов

Решение

На веб-сайте сообщества по конвертации есть ссылка на инструмент командной строки csv2xml. Поскольку он не поддерживается, вы можете выбрать другой вариант.

Также упоминается инструмент Java под названием csv2xml (предупреждение: сайт на немецком языке) и инструмент командной строки с именем ff-extractor.

Ссылка также содержит ссылки на Python, Perl, PHP, XSLT, но это означает, что вам нужно кодировать конвертер самостоятельно.

Когда вы знаете формат csv файл и структура вам нужна в xml файл, довольно просто сделать сценарий, который может обрабатывать преобразование.

Взять файл simple.csv:

Jack,35,United States
Jill,22,United Kingdom

Вы можете создать следующее xml файл:

<?xml version="1.0"?>
<Customers>
  <Customer>
    <Name>Jack</Name>
    <Age>35</Age>
    <Country>United States</Country>
 </Customer>
 <Customer>
    <Name>Jill</Name>
    <Age>22</Age>
    <Country>United Kingdom</Country>
 </Customer>
</Customers>

С помощью следующего скрипта:

#!/bin/bash
file_in="simple.csv"
file_out="simple.xml"
echo '<?xml version="1.0"?>' > $file_out
echo '<Customers>' >> $file_out
while IFS=$',' read -r -a arry
do
  echo '  <Customer>' >> $file_out
  echo '    <Name>'${arry[0]}'</Name>' >> $file_out
  echo '    <Age>'${arry[1]}'</Age>' >> $file_out
  echo '    <Country>'${arry[2]}'</Country>' >> $file_out
  echo '  </Customer>' >> $file_out
done < $file_in
echo '</Customers>' >> $file_out

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

IFS является внутренним спецификатором поля. IFS=$',' объявляет, что значение разделителя полей является запятой. Это стандартно для файла CSV, но при необходимости его можно изменить в соответствии с форматом входного файла.

-r аргумент read Команда говорит ему обрабатывать любые обратные слеши в вашем файле как часть ваших данных, а не как экранирование для следующего специального символа.

-a arry Аргумент помещает каждый столбец вашего файла в массив (с именем arry). Столбцы в этом примере: имя, возраст, страна. Другими словами, значения между запятыми. Таким образом, каждый столбец в строке хранится в массиве.

Тогда необходимый текст для xml просто обернут вокруг значений и xml строка добавляется в выходной файл с echo,

Довольно удобное для пользователя (т. Е. Простое для таких, как я) решение проблемы преобразования CSV в XML заключается в использовании хорошего кроссплатформенного редактора XML, в который встроена эта функция. (Я использовал его под Ubuntu и Mac OSX 10.10.5; у него также есть исполняемый файл Windows.)

XMLSpear

Как уже упоминалось, это редактор XML, но он включает в себя "импорт" CSV-to-XML (и Excel-to-XML) в своем главном меню:

Он конвертировал для меня 31-мегабайтный CSV-файл (дамп из базы данных библиотеки из 20000 записей) примерно за 15 секунд, что дало мне правильно сформированный XML-файл для сохранения и манипулирования.

В качестве редактора у него есть много других полезных функций (подробности по ссылке выше). Я не могу найти упоминание о какой-либо лицензии для него, но это включено в "README":

XMLSpear - бесплатное программное обеспечение для личного пользования.
Пожалуйста, отправьте свой отзыв на xmlspear@donkeydevelopment.com или на форуме http://donkeydevelopment.com/forums,

Коммерческое использование должно быть одобрено.
Просто отправьте электронное письмо по адресу xmlspear@donkeydevelopment.com с темой "Запрос лицензии".

В файле readme также содержится полезное содержимое файла.desktop.

Хорошо ли работает для меня под Ubuntu 18.04 LTS (Gnome).

Я бы предложил вам или кому-то написать коды на Python. Python легко выучить и легко решить вашу проблему. У этого есть и модуль CSV и модули XML. Мое предложение учитывает, что вам может потребоваться иметь собственные имена для элементов XML или иметь другие сложные требования (например, преобразование последнего столбца CSV в атрибут последнего, кроме одного столбца).

Есть множество учебников онлайн о Python.

Я большой поклонник BaseX который, кажется, имеет возможность импорта:

http://docs.basex.org/wiki/CSV_Module


Можно отметить, что, похоже, проще использовать веб-приложение:

https://webapps.stackexchange.com/q/123959/24327

Что составляет плагин или расширение для браузера, который работает с листами Google.

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

Другие вопросы по тегам