Earlier we learned how to read XML file and how to edit XML file in java using DOM Parser, today we will learn how to write an XML file in java using DOM Parser.
Here is the requirement for our XML file.
- The root element will be “Employees” with namespace “https://www.journaldev.com/employee”. This root element will contain the list of Employees.
- The employee information will be written in “Employee” element. There will be two employees information in the XML file.
- Every employee has an attribute named “id”
- Employee element will have four elements – “name”, “age”, “role”, “gender”.
Here is the java program for above requirement.
package com.journaldev.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class XMLWriterDOM {
public static void main(String[] args) {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.newDocument();
//add elements to Document
Element rootElement =
doc.createElementNS("https://www.journaldev.com/employee", "Employees");
//append root element to document
doc.appendChild(rootElement);
//append first child element to root element
rootElement.appendChild(getEmployee(doc, "1", "Pankaj", "29", "Java Developer", "Male"));
//append second child
rootElement.appendChild(getEmployee(doc, "2", "Lisa", "35", "Manager", "Female"));
//for output to file, console
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
//for pretty print
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
//write to console or file
StreamResult console = new StreamResult(System.out);
StreamResult file = new StreamResult(new File("/Users/pankaj/emps.xml"));
//write data
transformer.transform(source, console);
transformer.transform(source, file);
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
}
}
private static Node getEmployee(Document doc, String id, String name, String age, String role,
String gender) {
Element employee = doc.createElement("Employee");
//set id attribute
employee.setAttribute("id", id);
//create name element
employee.appendChild(getEmployeeElements(doc, employee, "name", name));
//create age element
employee.appendChild(getEmployeeElements(doc, employee, "age", age));
//create role element
employee.appendChild(getEmployeeElements(doc, employee, "role", role));
//create gender element
employee.appendChild(getEmployeeElements(doc, employee, "gender", gender));
return employee;
}
//utility method to create text node
private static Node getEmployeeElements(Document doc, Element element, String name, String value) {
Element node = doc.createElement(name);
node.appendChild(doc.createTextNode(value));
return node;
}
}
Notice that I have created two StreamResult, one to print XML in console for debugging purpose and another to write it to file.
Here is the output XML from above program.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Employees xmlns="https://www.journaldev.com/employee">
<Employee id="1">
<name>Pankaj</name>
<age>29</age>
<role>Java Developer</role>
<gender>Male</gender>
</Employee>
<Employee id="2">
<name>Lisa</name>
<age>35</age>
<role>Manager</role>
<gender>Female</gender>
</Employee>
</Employees>
The XML is not formatted, if you want XML to be properly formatted, read format XML in java.
LOL lots of lazy people want you to do their homework for them 馃槈
Hello Thanks for this code,
Can you please provide a code for Reading data From Excel file from a path in system and convert it to XML document and save this to another location
Great stuff. I was going through Google to find how to write XML (I already knew how to read), then I came across this and got super impressed with the clean demarcation of code and your lesson. Cheers!
Just awesome article. The code is very easy to understand. Thanks for sharing, Keep Blogging.
Hi Pankaj,
thanks for your post. I have another problem regarding XML. Let say i have 2 xml files and i am comparing both. In case if a elemnt in file1 exists and is missing in file2, i want to delete that element from file1 and at the same time i want to copy that element in a newly created xml file. In orer to have a record what was missing in file2. My Problem is i can delete that particular element from file1 but can’t copy it to the new xml file.
0 down vote
You can try this code., you will be getting the formatted output:
transformer.setOutputProperty(OutputKeys.INDENT, “yes”);
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,”yes”);
transformer.setOutputProperty(“{https://xml.apache.org/xslt}indent-amount”, “10”);
-Chandugudipati230@gmail.com
This is an excellent way of editing an XML. Although I need a solution were the XML format is retained, example editing a cache xml with below format should give me an output with the same format. Can you please suggest a way to do it ?
Tks!!
Very very nice! It works like charm. Thank you so much!
Hi pankaj,
Here i have a Question.. How to implement servlet in Struts Frame work.. Could explain clearly..
Would you like fries with that too?
That was funny. Lol..hahahahaaaaaaa !!!!