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.