Reputation: 3168
I have simple class to read XML file from the disc.
I don't know, how to save the result to CSV file? Can you please help me?
package praser;
public class ReadXML {
public static void main(String[] args) throws Exception{
File xmlFile = new File("C:\\test2.xml");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(xmlFile);
NodeList list = document.getElementsByTagName("Developer");
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
Element element = (Element) node;
System.out.println("Id: " + element.getAttribute("Id"));
System.out.println("Name " + element.getElementsByTagName("Name").item(0).getTextContent());
System.out.println("Surname " + element.getElementsByTagName("Surname").item(0).getTextContent());
System.out.println("Age " + element.getElementsByTagName("Age").item(0).getTextContent());
} }}}
My xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Developer Id="1">
<Name>Tom</Name>
<Surname>Hawk</Surname>
<Age>100</Age>
<Name>Tom2</Name>
<Surname>Hawk2</Surname>
<Age>200</Age>
</Developer>
Upvotes: 0
Views: 738
Reputation: 1
To get the data in separate column you have to use delimiters as comma ,
.
ID;Name;Age
01;Deepak;22
For above result you have to use semi column ;
as delimiter.
,
as delimiter.Upvotes: 0
Reputation: 2044
You can use following code to write the content in to csv file. This solution is based on the initial XML provided in the question as below.
<Developer Id="1">
<Name>Tom</Name>
<Surname>Hawk</Surname>
<Age>100</Age>
</Developer>
The code to read this xml and save it to csv can used following java code
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;
public class ReadXML {
public static void main(String[] args) throws Exception {
File xmlFile = new File("C:\\test2.xml");
File outputFile = new File("Output.csv");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(xmlFile);
NodeList list = document.getElementsByTagName("Developer");
BufferedWriter bw = null;
FileWriter fw = null;
try {
if (!outputFile.exists()) {
outputFile.createNewFile();
}
// true = append file
fw = new FileWriter(outputFile.getAbsoluteFile(), true);
bw = new BufferedWriter(fw);
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Id: " + element.getAttribute("Id"));
System.out.println("Name " + element.getElementsByTagName("Name").item(0).getTextContent());
System.out.println("Surname " + element.getElementsByTagName("Surname").item(0).getTextContent());
System.out.println("Age " + element.getElementsByTagName("Age").item(0).getTextContent());
bw.write(element.getAttribute("Id") + ","
+ element.getElementsByTagName("Name").item(0).getTextContent() + ","
+ element.getElementsByTagName("Surname").item(0).getTextContent() + ","
+ element.getElementsByTagName("Age").item(0).getTextContent() + "," + "\n");
}
}
}
catch (IOException e) {
// catch block
e.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fw != null)
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Output.csv will be give similar to below screen.
Upvotes: 0
Reputation: 358
use this code segment :
package praser;
public class ReadXML {
public static void main(String[] args) throws Exception{
File xmlFile = new File("C:\\test2.xml");
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(xmlFile);
NodeList list = document.getElementsByTagName("Developer");
Writer writer = new OutputStreamWriter(new FileOutputStream("pathToFile"), "UTF-8");
BufferedWriter bw = new BufferedWriter(writer);
String id, name, surname, age, line;
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
Element element = (Element) node;
id = element.getAttribute("Id");
name = element.getElementsByTagName("Name").item(0).getTextContent();
surname = element.getElementsByTagName("Surname").item(0).getTextContent();
age = element.getElementsByTagName("Age").item(0).getTextContent();
line = String.format("%s\t%s\t%s\t%s", id, name, surname, age);
bw.write(line);
bw.newLine();
bw.flush();
} }}}
Input file :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Data>
<Developer Id="1">
<Name>Tom</Name>
<Surname>Hawk</Surname>
<Age>100</Age>
</Developer>
<Developer Id="2">
<Name>jessy</Name>
<Surname>Jay</Surname>
<Age>16</Age>
</Developer>
</Data>
output :
1 Tom Hawk 100
2 jessy Jay 16
Upvotes: 1