Existe um aplicativo ou biblioteca em Java que me permite converter um CSV
arquivo de dados em XML
arquivo?
As XML
tags seriam fornecidas possivelmente pela primeira linha contendo os cabeçalhos das colunas.
java
xml
csv
data-conversion
A Salim
fonte
fonte
Respostas:
Talvez isso possa ajudar: JSefa
Você pode ler o arquivo CSV com esta ferramenta e serializá-lo para XML.
fonte
Como os outros acima, não conheço nenhuma maneira simples de fazer isso, mas se você estiver pronto para usar bibliotecas externas muito simples, sugiro:
OpenCsv para análise de CSV (pequeno, simples, confiável e fácil de usar)
Xstream para analisar / serializar XML (muito, muito fácil de usar e criando um xml totalmente legível por humanos)
Usando os mesmos dados de amostra acima, o código ficaria assim:
Produzindo o seguinte resultado: (Xstream permite um ajuste muito fino do resultado ...)
fonte
Eu sei que você pediu Java, mas isso me parece uma tarefa adequada para uma linguagem de script. Aqui está uma solução rápida (muito simples) escrita em Groovy.
test.csv
csvtoxml.groovy
Grava o seguinte XML no stdout:
No entanto, o código faz uma análise muito simples (sem levar em consideração as vírgulas entre aspas ou com escape) e não leva em consideração a possível ausência de dados.
fonte
Eu tenho uma estrutura de código aberto para trabalhar com CSV e arquivos simples em geral. Talvez valha a pena procurar: JFileHelpers .
Com esse kit de ferramentas, você pode escrever código usando beans, como:
e então apenas analise seus arquivos de texto usando:
E você terá uma coleção de objetos analisados.
Espero que ajude!
fonte
Esta solução não precisa de nenhuma biblioteca CSV ou XML e, eu sei, ela não lida com caracteres ilegais e problemas de codificação, mas você pode estar interessado nela também, desde que sua entrada CSV não quebre as regras mencionadas acima.
Atenção: Você não deve usar este código a menos que saiba o que faz ou não tenha a chance de usar outra biblioteca (possível em alguns projetos burocráticos) ... Use um StringBuffer para ambientes de tempo de execução mais antigos ...
Aqui vamos nos:
A entrada test.csv (roubada de outra resposta desta página):
A saída resultante:
fonte
A grande diferença é que o JSefa traz é que ele pode serializar seus objetos java para arquivos CSV / XML / etc e pode desserializar de volta para objetos java. E é impulsionado por anotações que lhe dão muito controle sobre a saída.
JFileHelpers também parece interessante.
fonte
Não entendo por que você deseja fazer isso. Soa quase como codificação de culto à carga.
Converter um arquivo CSV em XML não adiciona nenhum valor. Seu programa já está lendo o arquivo CSV, portanto, argumentar que você precisa do XML não funciona.
Por outro lado, ler o arquivo CSV, fazer algo com os valores e, em seguida, serializar para XML faz sentido (bem, tanto quanto usar XML pode fazer sentido ...;)), mas você supostamente já teria um meio de serializando para XML.
fonte
Você pode fazer isso de maneira excepcionalmente fácil usando Groovy, e o código é muito legível.
Basicamente, a variável de texto será gravada
contacts.xml
para cada linha nocontactData.csv
, e a matriz de campos contém cada coluna.fonte
Você pode usar XSLT . Pesquise no Google e você encontrará alguns exemplos, por exemplo, CSV para XML. Se você usar XSLT, poderá converter o XML para o formato que desejar.
fonte
Há também uma boa biblioteca ServingXML de Daniel Parker, que é capaz de converter quase qualquer formato de texto simples para XML e vice-versa.
O exemplo para o seu caso pode ser encontrado aqui : Ele usa o título do campo no arquivo CSV como o nome do elemento XML.
fonte
Não há nada que eu conheça que possa fazer isso sem que você, pelo menos, escreva um pouco de código ... Você precisará de 2 bibliotecas separadas:
O analisador CSV que eu recomendaria (a menos que você queira se divertir um pouco para escrever seu próprio analisador CSV) é o OpenCSV (um projeto SourceForge para análise de dados CSV)
O XML Serialization Framework deve ser algo que pode ser escalonado caso você queira transformar um arquivo CSV grande (ou enorme) em XML: Minha recomendação é o Sun Java Streaming XML Parser Framework (veja aqui ), que permite pull-parsing E serialização.
fonte
Até onde eu sei, não há uma biblioteca pronta para fazer isso para você, mas a produção de uma ferramenta capaz de traduzir de CSV para XML deve exigir apenas que você escreva um analisador CSV bruto e conecte JDOM (ou sua biblioteca XML de Java de escolha) com algum código de cola.
fonte
A família de processadores Jackson tem back-ends para vários formatos de dados, não apenas JSON. Isso inclui back-ends XML ( https://github.com/FasterXML/jackson-dataformat-xml ) e CSV ( https://github.com/FasterXML/jackson-dataformat-csv/ ).
A conversão dependeria da leitura de entrada com back-end CSV e da escrita usando back-end XML. Isso é mais fácil de fazer se você tiver (ou puder definir) um POJO para entradas por linha (CSV). Este não é um requisito estrito, pois o conteúdo do CSV também pode ser lido "sem tipo" (uma sequência de
String
matrizes), mas requer um pouco mais de trabalho na saída XML.Para o lado XML, você precisaria de um objeto raiz do wrapper para conter a matriz ou
List
de objetos para serializar.fonte
Eu tive o mesmo problema e precisava de um aplicativo para converter um arquivo CSV em um arquivo XML para um de meus projetos, mas não encontrei nada gratuito e bom o suficiente na rede, então codifiquei meu próprio aplicativo Java Swing CSVtoXML.
Está disponível no meu site AQUI . Espero que ajude você.
Se não, você pode facilmente codificar o seu próprio código como eu fiz; O código-fonte está dentro do arquivo jar, portanto, modifique-o conforme necessário, se ele não atender aos seus requisitos.
fonte
Para a parte CSV, você pode usar minha pequena biblioteca de código aberto
fonte
Isso pode ser uma solução muito básica ou limitada, mas você não poderia fazer um
String.split()
em cada linha do arquivo, lembrando a matriz de resultado da primeira linha para gerar o XML, e apenas cuspir os dados da matriz de cada linha com o XML adequado elementos preenchendo cada iteração de um loop?fonte