Reputation: 15
I'm wondering if there is an accepted method to convert a Pipe delimited text file to XML in Java. The delimited file I am looking to convert is in the format:
RefNo | Location | Name | Age
123 | North America | Steve | 32
And I am looking to convert it to:
<data>
<RefNo>123</RefNo>
<location>North America</location>
<name> Steve </name>
<age> 32 </age>
</data>
Upvotes: 1
Views: 6676
Reputation: 15
I Found 1 more way to convert CSV TO XML....
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class CSV2XML {
// Protected Properties
protected DocumentBuilderFactory domFactory = null;
protected DocumentBuilder domBuilder = null;
// CTOR
public CSV2XML()
{
try
{
domFactory = DocumentBuilderFactory.newInstance();
domBuilder = domFactory.newDocumentBuilder();
}
catch(FactoryConfigurationError exp)
{
System.err.println(exp.toString());
}
catch(ParserConfigurationException exp)
{
System.err.println(exp.toString());
}
catch(Exception exp)
{
System.err.println(exp.toString());
}
}
public int convertFile(String csvFileName, String xmlFileName)
{
int rowsCount = -1;
try
{
Document newDoc = domBuilder.newDocument();
// Root element
Element rootElement = newDoc.createElement("CSV2XML");
newDoc.appendChild(rootElement);
// Read comma seperated file
BufferedReader csvReader;
csvFileName = "C:\\frnds.csv";
csvReader = new BufferedReader(new FileReader(csvFileName));
int fieldCount = 0;
String[] csvFields = null;
StringTokenizer stringTokenizer = null;
// Assumption: first line in CSV file is column/field names
// As the column names are used to name the elements in the XML file,
// avoid using spaces/any other characters not suitable for XML element naming
String curLine = csvReader.readLine();
if(curLine != null)
{
stringTokenizer = new StringTokenizer(curLine, ",");
fieldCount = stringTokenizer.countTokens();
if(fieldCount > 0)
{
csvFields = new String[fieldCount];
int i=0;
while(stringTokenizer.hasMoreElements())
csvFields[i++] =
String.valueOf(stringTokenizer.nextElement());
}
}
// Now we know the columns, Let's now read data row lines
while((curLine = csvReader.readLine()) != null)
{
stringTokenizer = new StringTokenizer(curLine, ",");
fieldCount = stringTokenizer.countTokens();
if(fieldCount > 0)
{
Element rowElement = newDoc.createElement("row");
int i=0;
while(stringTokenizer.hasMoreElements())
{
try
{
String curValue =
String.valueOf(stringTokenizer.nextElement());
Element curElement =
newDoc.createElement(csvFields[i++]);
curElement.appendChild(newDoc.createTextNode(curValue));
rowElement.appendChild(curElement);
}
catch(Exception exp)
{
}
}
rootElement.appendChild(rowElement);
rowsCount++;
}
}
csvReader.close();
// Save the document to the disk file
TransformerFactory tranFactory = TransformerFactory.newInstance();
Transformer aTransformer = tranFactory.newTransformer();
Source src = new DOMSource(newDoc);
xmlFileName = "C:\\stest.xml";
Result dest = new StreamResult(new File(xmlFileName));
aTransformer.transform(src, dest);
rowsCount++;
}
catch(IOException exp)
{
System.err.println(exp.toString());
}
catch(Exception exp)
{
System.err.println(exp.toString());
}
return rowsCount;
}
public static void main(String[] args)
{
try
{
args = new String[] {"C:\\frnds.csv", "C:\\stest.xml"};
if(args.length != 2)
{
System.out.println("Usage: java CSV2XML <inputCSVFile> <outputXMLFile>");
return;
}
}
catch(Exception exp)
{
System.err.println(exp.toString());
}
try
{
CSV2XML csvConverter = new CSV2XML();
int rowsCount = csvConverter.convertFile(args[0], args[1]);
if(rowsCount >= 0)
{
System.out.println("CSV File '" + args[0] + "' successfully converted to XML File '"+ args[1] + "'\n" + "(" + String.valueOf(rowsCount) + " rows)");
}
else
{
System.out.println("Error while converting input CSV File '" + args[0] + "' to output XML File '"+ args[1] + "'");
}
}
catch(Exception exp)
{
System.err.println(exp.toString());
}
}
}
Upvotes: 0
Reputation: 163448
Run the XSLT transformation given here, or adapt it as needed:
http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html
Upvotes: 1
Reputation: 6107
Here are some answers to your question, but first you should replace the pipe separator by a comma, because it is CSV
to XML
.
You can do it using s.replaceAll("|",",")
in String
class and following these instructions:
Conversion of CSV to XML with JAVA
Java lib or app to convert CSV to XML file?
Upvotes: 1