¿Cómo puedo convertir un archivo CSV a XML?

8

¿Cómo puedo convertir un archivo CSV a XML?

¿Hay algún software para Ubuntu?

Vitor Mazuco
fuente
No entiendo. Los tres formatos que menciona son archivos de texto sin formato: la diferencia está en el contenido. Y alcance. ¿Te importaría agregar un ejemplo?
Rmano
1
Votación para volver a abrir. Considero que esto es bastante sencillo y fácil de responder ;-)
Rinzwind
1
Apoyo a Rinzwind, porque acabo de preguntarle al software que puede convertir.
Vitor Mazuco

Respuestas:

7

En el sitio web de la comunidad sobre la conversión hay un enlace a una herramienta de línea de comandos llamada csv2xml . Como no se mantiene, es posible que desee elegir otra opción.

También se menciona una herramienta de Java llamada csv2xml (advertencia: el sitio web está en alemán) y una herramienta de línea de comandos llamada ff-extractor .

El enlace también tiene referencias a Python, Perl, PHP, XSLT, pero eso significa que debe codificar el convertidor usted mismo.

Rinzwind
fuente
1
Actualicé un poco con las referencias en el primer enlace. También hay un producto comercial llamado Altova ( altova.com ).
Rinzwind
10

Cuando conoce el formato del csvarchivo y la estructura que necesita en el xmlarchivo, es bastante sencillo crear un script que pueda manejar la conversión.

Toma el archivo simple.csv:

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

Puede crear el siguiente xmlarchivo:

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

Con el siguiente 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

Incluso si nunca ha codificado antes, creo que esto debería ser fácil de usar y modificar. El archivo se lee línea por línea en el whilebucle.

IFSes el especificador de campo interno. El IFS=$','declara que el valor del separador de campo es una coma. Esto es estándar para un archivo CSV, pero se puede cambiar según sea necesario para que coincida con el formato del archivo de entrada.

El -rargumento del readcomando le dice que trate cualquier barra diagonal inversa en su archivo como parte de sus datos en lugar de como un escape para un siguiente carácter especial.

El -a arryargumento coloca cada columna de su archivo en una matriz (llamada arry). Las columnas en este ejemplo son nombre, edad, país. En otras palabras, los valores entre las comas. Por lo tanto, cada columna de la línea se almacena en una matriz.

Luego, el texto necesario para xmlse envuelve alrededor de los valores y la xmllínea se agrega al archivo de salida con echo.

chaskes
fuente
@chaskes, si explica la opción utilizada en línea while IFS=$',' read -r -a arry , es útil para otra. Gracias.
alhelal
@BandaMuhammadAlHelal Hecho.
chaskes
¿Cómo tratarías las comas que aparecen dentro de los campos, entre comillas dobles? Como en "Somename, Jack"lugar de Jacken el archivo de entrada?
muk.li
1
@ muk.li El separador de campo de entrada (generalmente una coma) está marcado en la línea que comienza: mientras IFS = $ ','. Digamos que el separador es un asterisco, simplemente lo cambiaría a: $ '*'. Entonces, en su caso, debería ser $ '"' (comilla simple, comilla doble, comilla simple). Esto debería funcionar bien, pero citar en el shell puede ser complicado, y no he tenido la oportunidad de probarlo.
chaskes
1

Una solución bastante fácil de usar (es decir, fácil para los entusiastas como yo) al desafío de conversión de CSV a XML es usar un buen editor XML multiplataforma que tenga esta característica incorporada. (Lo he usado en Ubuntu y Mac OSX 10.10.5; también tiene Windows ejecutable).

XMLSpear

Como se mencionó, es un editor XML, pero incluye "importar" CSV a XML (y Excel a XML) en su menú principal:

ingrese la descripción de la imagen aquí

Convirtió un archivo CSV de 31Mb para mí (un volcado de una base de datos de la biblioteca de 20,000 entradas) en aproximadamente 15 segundos, dándome un archivo XML bien formado para guardar y manipular.

Como editor, tiene muchas otras características de bienvenida (detalladas en el enlace anterior). No encuentro mención de ninguna licencia para ello, pero esto está incluido en el "LÉAME":

XMLSpear es un software gratuito para uso personal.
Envíe sus comentarios a [email protected] o en el foro http://donkeydevelopment.com/forums.

El uso comercial debe ser aprobado por donkeydevelopment.
Simplemente envíe un correo electrónico a [email protected] con el asunto "solicitud de licencia".

El archivo Léame también incluye útilmente el contenido de un archivo .desktop.

Me funciona bien en Ubuntu 18.04 LTS (Gnome).

Dɑvïd
fuente
0

Soy un gran admirador del BaseXcual parece tener una capacidad de importación:

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


Podría señalar que, aparentemente, es más fácil usar una aplicación web:

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

Lo que equivale a un complemento o extensión para el navegador que funciona con las hojas de Google.

Siento tu dolor porque es una utilidad aparentemente simple que debería, bueno, estar disponible a través de apt.

Thufir
fuente
0

Sugeriría que usted o alguien escriba códigos en Python. Python es fácil de aprender y resuelve su problema fácilmente. Tiene tanto módulo CSV como módulos XML . Mi sugerencia tiene en cuenta que es posible que deba tener sus propios nombres para los elementos XML o tener otros requisitos complejos (como convertir la última columna CSV en el atributo de la última pero una columna).

Hay toneladas de tutoriales en línea sobre Python.

Stefano Mtangoo
fuente