Como posso converter um arquivo CSV para XML?

8

Como posso converter um arquivo CSV para XML?

Existe algum software para o Ubuntu?

Vitor Mazuco
fonte
Eu não entendo Os três formatos mencionados são arquivos de texto simples - a diferença está no conteúdo. E escopo. Você gostaria de adicionar um exemplo?
Rmano 3/15/15
1
Votação para reabrir. Eu considero isso bastante simples e fácil de resposta ;-)
Rinzwind
1
Apoio Rinzwind, porque acabei de solicitar o software que pode converter.
Vitor Mazuco 03/02

Respostas:

7

No site da comunidade sobre conversão, há um link para uma ferramenta de linha de comando chamada csv2xml . Como não é mantido, convém escolher outra opção.

Também há menção de uma ferramenta java chamada csv2xml (aviso: o site está em alemão) e uma ferramenta de linha de comando chamada ff-extractor .

O link também tem referências a Python, Perl, PHP, XSLT, mas isso significa que você precisa codificar o conversor.

Rinzwind
fonte
1
Atualizei um pouco com as referências no 1º link. Há também um produto comercial chamado Altova ( altova.com ).
Rinzwind
10

Quando você conhece o formato do csvarquivo e a estrutura necessária no xmlarquivo, é bastante simples criar um script que possa lidar com a conversão.

Pegue o arquivo simple.csv:

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

Você pode criar o seguinte xmlarquivo:

<?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>

Com o seguinte script:

#!/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

Mesmo que você nunca tenha codificado antes, acho que isso deve ser fácil de usar e modificar. O arquivo é lido linha por linha no whileloop.

IFSé o especificador de campo interno. O IFS=$','declara que o valor do separador de campos é uma vírgula. Isso é padrão para um arquivo CSV, mas pode ser alterado conforme necessário para corresponder ao formato do arquivo de entrada.

O -rargumento para o readcomando diz para tratar qualquer barra invertida em seu arquivo como parte de seus dados, e não como uma fuga para o seguinte caractere especial.

O -a arryargumento coloca cada coluna do seu arquivo em uma matriz (nomeada arry). As colunas neste exemplo são nome, idade, país. Em outras palavras, os valores entre as vírgulas. Portanto, cada coluna na linha é armazenada em uma matriz.

Em seguida, o texto necessário xmlé apenas contornado os valores e a xmllinha é anexada ao arquivo de saída com echo.

perseguições
fonte
@chaskes, se você explicar a opção usada em linha while IFS=$',' read -r -a arry , é útil para outra. Obrigado.
Alhelal
@BandaMuhammadAlHelal Done.
usar o seguinte comando
Como você lida com as vírgulas que aparecem nos campos, entre aspas duplas? Como no "Somename, Jack"lugar de Jackno arquivo de entrada?
muk.li
1
@ muk.li O separador do campo de entrada (geralmente uma vírgula) é marcado na linha inicial: enquanto IFS = $ ','. Digamos que o separador seja um asterisco, você o alteraria para: $ '*'. Portanto, no seu caso, deve ser $ '"' (aspas simples, aspas simples, aspas simples). Isso deve funcionar bem, mas a citação no shell pode ser complicada e não tive a chance de testá-lo.
usar o seguinte comando
1

Uma solução bastante amigável (ou seja, fácil para quem gosta de coisas como eu) para o desafio de conversão de CSV para XML é usar um bom editor XML de plataforma cruzada que possui esse recurso embutido. (Eu o usei no Ubuntu e no Mac OSX 10.10.5; ele também tem o Windows executável.)

XMLSpear

Como mencionado, é um editor XML, mas inclui "importação" de CSV para XML (e Excel para XML) em seu menu principal:

insira a descrição da imagem aqui

Ele converteu um arquivo CSV de 31Mb para mim (um despejo de um banco de dados da biblioteca de 20.000 entradas) em cerca de 15 segundos, fornecendo um arquivo XML bem formado para salvar e manipular.

Como editor, ele tem muitos outros recursos de boas-vindas (detalhados no link acima). Não consigo encontrar menção a nenhuma licença, mas isso está incluído no "README":

XMLSpear é um software gratuito para uso pessoal.
Envie seus comentários para [email protected] ou no fórum http://donkeydevelopment.com/forums.

O uso comercial deve ser aprovado pelo desenvolvimento de burros.
Envie um email para [email protected] com o assunto "solicitação de licença".

O leia-me também inclui o conteúdo de um arquivo .desktop.

Faz o trabalho bem para mim no Ubuntu 18.04 LTS (Gnome).

Dɑvïd
fonte
0

Sou um grande fã do BaseXqual parece ter uma capacidade de importação:

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


Pode-se destacar que é aparentemente mais fácil usar um aplicativo da Web:

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

O que equivale a um plug-in ou extensão ao navegador que funciona com as folhas do Google.

Sinto sua dor porque é um utilitário aparentemente simples que deve estar disponível no apt.

Thufir
fonte
0

Eu sugiro que você ou alguém escreva códigos em Python. Python é fácil de aprender e resolver seu problema facilmente. Possui módulos CSV e XML . Minha sugestão leva em consideração que talvez você precise ter seus próprios nomes para elementos XML ou outros requisitos complexos (como converter a última coluna CSV em atributo da última, mas uma coluna).

Há toneladas de tutoriais online sobre Python.

Stefano Mtangoo
fonte