Як я можу конвертувати файл CSV у XML?


8

Як я можу конвертувати файл CSV у XML?

Чи є якесь програмне забезпечення для Ubuntu?


Я не розумію. Три формати, про які ви згадуєте, - це звичайні текстові файли --- різниця полягає у змісті. І сфера застосування. Ви б не хотіли додати приклад?
Рмано

1
Голосування за повторне відкриття. Я вважаю це досить просто і легко відповісти ;-)
Rinzwind

1
Я підтримую Rinzwind, тому що я просто запитав програмне забезпечення, яке може конвертувати.
Vitor Mazuco

Відповіді:


7

На веб-сайті спільноти щодо перетворення є посилання на інструмент командного рядка під назвою csv2xml . Оскільки це не збережено, ви можете вибрати інший варіант.

Також згадується інструмент java під назвою csv2xml (попередження: веб-сайт є німецькою мовою) та інструмент командного рядка, який називається ff-extractor .

Посилання також містить посилання на Python, Perl, PHP, XSLT, але це означає, що вам потрібно кодувати перетворювач самостійно.


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, якщо ви поясните варіант, який використовується в рядку while IFS=$',' read -r -a arry , він корисний для іншого. Дякую.
alhelal

@BandaMuhammadAlHelal Готово.
chaskes

Як би ви попрацювали з комами, що з’являються в полях, оточені подвійними лапками? Як "Somename, Jack"замість Jackвхідного файлу?
muk.li

1
@ muk.li Розділювач поля введення (зазвичай кома) позначається на рядку, що починається: IFS = $ ','. Скажімо, роздільник - це зірочка, ви просто змінили його на: $ '*'. Отже, у вашому випадку це повинно бути $ '"' (одна цитата, подвійна цитата, одинарна цитата). Це повинно спрацювати нормально, але цитування в оболонці може стати складним, і я не мав можливості перевірити це.
chaskes

1

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

XMLSpear

Як вже згадувалося, це редактор XML, але він включає "імпорт" CSV-в-XML (і Excel-в-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).


0

Я великий фанат, BaseXякий, схоже, має можливість імпорту:

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


Можна вказати, що користуватися веб-додатком, здавалося б, простіше:

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

Що означає плагін або розширення для браузера, який працює з google аркушами.

Я відчуваю ваш біль, тому що це, здавалося б, проста утиліта, яка повинна бути доступна через сприятливі.


0

Я б запропонував вам або комусь написати коди в Python. Python легко засвоїти і легко вирішити вашу проблему. Він має як модуль CSV, так і модулі XML . Моя пропозиція враховує, що вам може знадобитися мати власні імена елементів XML або мати інші складні вимоги (наприклад, перетворення останнього стовпця CSV в атрибут останнього, але одного стовпця).

В Інтернеті є багато підручників про Python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.