Как конвертировать CSV-файл в XML?
Есть ли какое-нибудь программное обеспечение для Ubuntu?
Когда вы знаете формат файла 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.