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

8

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

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

Витор Мазуко
источник
Я не понимаю Три формата, которые вы упоминаете, представляют собой простые текстовые файлы - разница в содержании. И размах. Не могли бы вы добавить пример?
Rmano
1
Голосование для повторного открытия. Я считаю, что это довольно просто и легко ответить ;-)
Rinzwind
1
Я поддерживаю Rinzwind, потому что я просто спросил программное обеспечение, которое может конвертировать.
Витор Мазуко

Ответы:

7

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

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

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

Rinzwind
источник
1
Я немного обновился со ссылками в 1-й ссылке. Существует также коммерческий продукт под названием Altova ( altova.com ).
Rinzwind
10

Когда вы знаете формат 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.

chaskes
источник
@chaskes, если вы объясните опцию, используемую в строке while IFS=$',' read -r -a arry , это полезно для другого. Спасибо.
Алхелал
@BandaMuhammadAlHelal Готово.
chaskes
Как бы вы справились с запятыми в полях, окруженных двойными кавычками? Как на "Somename, Jack"месте Jackво входном файле?
muk.li
1
@ muk.li Разделитель поля ввода (обычно запятая) отмечается в начале строки: while IFS = $ ','. Допустим, разделитель является звездочкой, вы просто измените его на: $ '*'. Итак, в вашем случае, это должно быть $ '"' (одинарная кавычка, двойная кавычка, одинарная кавычка). Это должно работать нормально, но цитирование в оболочке может стать хитрым, и у меня не было возможности проверить это.
Часов
1

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

XMLSpear

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

введите описание изображения здесь

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

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

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

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

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

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

Dɑvïd
источник
0

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

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


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

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

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

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

Суфир
источник
0

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

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

Стефано Мтангу
источник