Как преобразовать CSV-файл в XML?

Как конвертировать CSV-файл в XML?

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

1
задан 4 February 2015 в 01:19

1 ответ

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

Возьмите файл [ f6]:

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 - это внутренний спецификатор поля. [F10] объявляет, что значение разделителя полей является запятой. Это стандартно для файла CSV, но его можно изменить по мере необходимости, чтобы соответствовать формату входного файла.

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

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

Затем нужный текст для xml просто обернут вокруг значений, а строка xml добавляется к выходному файлу с помощью echo.

8
ответ дан 23 May 2018 в 23:34
  • 1
    хорошо, спасибо большое – Vitor Mazuco 5 February 2015 в 22:39
  • 2
    @chaskes, если вы объясните опцию, используемую в строке while IFS=$',' read -r -a arry , она полезна для другого. Благодарю. – alhelal 25 January 2017 в 21:43
  • 3
    @BandaMuhammadAlHelal Сделано. – chaskes 25 January 2017 в 22:16

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

Похожие вопросы: