Saltar al contenido

¿Java lib o aplicación para convertir CSV a archivo XML?

Te recomendamos que pruebes esta solución en un entorno controlado antes de enviarlo a producción, saludos.

Solución:

Quizás esto pueda ayudar: JSefa

Puede leer el archivo CSV con esta herramienta y serializarlo en XML.

Como los demás anteriores, no conozco ninguna forma de un solo paso para hacerlo, pero si está listo para usar bibliotecas externas muy simples, sugeriría:

OpenCsv para analizar CSV (pequeño, simple, confiable y fácil de usar)

Xstream para analizar / serializar XML (muy muy fácil de usar y creando xml completamente legible para humanos)

Usando los mismos datos de muestra que arriba, el código se vería así:

package fr.megiste.test;

import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import au.com.bytecode.opencsv.CSVReader;

import com.thoughtworks.xstream.XStream;

public class CsvToXml      

    public static void main(String[] args) 

        String startFile = "./startData.csv";
        String outFile = "./outData.xml";

        try 
            CSVReader reader = new CSVReader(new FileReader(startFile));
            String[] line = null;

            String[] header = reader.readNext();

            List out = new ArrayList();

            while((line = reader.readNext())!=null)
                List item = new ArrayList();
                    for (int i = 0; i < header.length; i++) 
                    String[] keyVal = new String[2];
                    String string = header[i];
                    String val = line[i];
                    keyVal[0] = string;
                    keyVal[1] = val;
                    item.add(keyVal);
                
                out.add(item);
            

            XStream xstream = new XStream();

            xstream.toXML(out, new FileWriter(outFile,false));

         catch (Exception e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
    

Produciendo el siguiente resultado: (Xstream permite un ajuste muy fino del resultado ...)


  
    
      string
      hello world
    
    
      float1
      1.0
    
    
      float2
      3.3
    
    
      integer
      4
    
  
  
    
      string
      goodbye world
    
    
      float1
      1e9
    
    
      float2
      -3.3
    
    
      integer
      45
    
  
  
    
      string
      hello again
    
    
      float1
      -1
    
    
      float2
      23.33
    
    
      integer
      456
    
  
  
    
      string
      hello world 3
    
    
      float1
      1.40
    
    
      float2
      34.83
    
    
      integer
      4999
    
  
  
    
      string
      hello 2 world
    
    
      float1
      9981.05
    
    
      float2
      43.33
    
    
      integer
      444
    
  

Sé que solicitó Java, pero me parece una tarea muy adecuada para un lenguaje de programación. Aquí hay una solución rápida (muy simple) escrita en Groovy.

test.csv

string,float1,float2,integer
hello world,1.0,3.3,4
goodbye world,1e9,-3.3,45
hello again,-1,23.33,456
hello world 3,1.40,34.83,4999
hello 2 world,9981.05,43.33,444

csvtoxml.groovy

#!/usr/bin/env groovy

def csvdata = []
new File("test.csv").eachLine  line ->
    csvdata << line.split(',')


def headers = csvdata[0]
def dataRows = csvdata[1..-1]

def xml = new groovy.xml.MarkupBuilder()

// write 'root' element
xml.root 
    dataRows.eachWithIndex  dataRow, index ->
        // write 'entry' element with 'id' attribute
        entry(id:index+1) 
            headers.eachWithIndex  heading, i ->
                // write each heading with associated content
                "$heading"(dataRow[i])
            
        
    

Escribe el siguiente XML en stdout:


  
    hello world
    1.0
    3.3
    4
  
  
    goodbye world
    1e9
    -3.3
    45
  
  
    hello again
    -1
    23.33
    456
  
  
    hello world 3
    1.40
    34.83
    4999
  
  
    hello 2 world
    9981.05
    43.33
    444
  

Sin embargo, el código realiza un análisis muy simple (sin tener en cuenta las comillas entre comillas o escapadas) y no tiene en cuenta la posible ausencia de datos.

Te invitamos a asentar nuestro trabajo exponiendo un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *