Is there an existing application or library in Java which will allow me to take CSV data and create an XML file? The XML tags would be provided through maybe the first row containing column headings.
Maybe this might help: JSefa Read csv file with this tool and serialize to xml :) |
||||
|
As the others above, I don't know any one-step way to do that, but if you are ready to use very simple external libraries, I would suggest: OpenCsv for parsing CSV (small, simple, reliable and easy to use) Xstream to parse/serialize XML (very very easy to use, and creating fully human readable xml) Using the same sample data as above, code would look like:
Producing the following result: (Xstream allows very fine tuning of the result...)
|
|||
|
I know you asked for Java, but this strikes me as a task well suited to a scripting language. Here is a quick (very simple) solution written in Groovy. test.csv
csvtoxml.groovy
writes the following XML to stdout:
However, the code does very simple parsing (not taking into account quoted or escaped commas) and it does not account for possible absent data. |
|||||
|
I don't understand why you would want to do this. It sounds almost like cargo cult coding. Converting a CSV file to XML doesn't add any value. Your program is already reading the CSV file, so arguing that you need XML doesn't work. On the other hand, reading the CSV file, doing something with the values, and then serializing to XML does make sense (well, as much as using XML can make sense... ;)) but you would supposedly already have a means of serializing to XML. |
|||
|
This solution does not need any CSV or XML libraries and, I know, it does not handle any illegal characters and encoding issues, but you might be interested in it as well, provided your CSV input does not break the above mentioned rules. Attention: You should not use this code unless you know what you do or don't have the chance to use a further library (possible in some bureacratic projects)... Use a StringBuffer for older Runtime Environments... So here we go:
The input test.csv (stolen from another answer on this page):
The resulting output:
|
|||
|
I have an opensource framework for working with CSV and flat files in general. Maybe it's worth looking: JFileHelpers. With that toolkit you can write code using beans, like:
and then just parse your text files using:
And you'll have a collection of parsed objects. Hope that helps! |
|||
|
You can do this exceptionally easily using Groovy and the code is very readable. Basically the text variable will be written to contacts.xml for each line in the contactData.csv and the fields array contains each column.
} |
|||
|
This may be too basic or limited of a solution, but couldn't you do a String.split() on each line of the file, remembering the result array of the first line to generate the XML, and just spit each line's array data out with the proper XML elements padding each iteration of a loop? |
|||
|
@Ryan Fox, the problem is that the current application accepts input for what I need in XML. I know it's a pain, but it's something that those higher up see no reason to change even though users at this point are taking CSV files and manually changing it to XML. So, I'm looking for ways to cut that task for the user and just make the system handle it. @svrist, thanks, I will try this out. @saint_groceon, I was planning on doing that if there were no existing libraries |
|||
|
AFAIK, there's no ready-made library to do this for you, but producing a tool capable of translating from CSV to XML should only require you to write a crude CSV parser and hook up JDOM (or your XML Java library of choice) with some glue code. |
|||
|
There is nothing I know of that can do this without you at least writing a little bit of code... You will need 2 separate library:
The CSV parser I would recommend (unless you want to have a little bit of fun to write your own CSV Parser) is OpenCSV (A SourceForge Project for parsing CSV Data) The XML Serialization Framework should be something that can scale in case you want to transform large (or huge) CSV file to XML: I recommend is the Sun Java Streaming XML Parser Framework (See here) which allows pull-parsing AND serialization. |
|||
|
For the CSV Part, you may use my little open source library |
|||
|
There is also good library ServingXML by Daniel Parker, which is able to convert almost any plain text format to XML and back. The example for your case can be found here: http://servingxml.sourceforge.net/examples/index.html#d62e305 - uses heading of field in CSV file as the XML element name. |
|||
|
You could use xslt. Google it and you will find a few examples e.g. csv to xml If you use xslt you can then convert the xml to whatever format you want. |
|||
|
+1 for JSefa. The big difference that JSefa brings in is that it can serialize your java objects to csv/xml/etc files and can deserialize back to java objects. And it's driven by annotations which gives you lot of control over the output. JFileHelpers also looks interesting. |
|||
|