Update or Edit XML File using DOM Parser
In our earlier tutorial we have seen how to read XML file using DOM and SAX Parser. In this tutorial we will see how to edit or update XMl file using DOM parser. We have used below sample XML to update using DOM parser.
SAMPLE XML:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<organization>
<employee mode="permanent">
<name>John</name>
<empid>1234</empid>
<designation>SE</designation>
<technology>Java</technology>
</employee>
<employee mode="contract">
<name>David</name>
<empid>4545</empid>
<designation>Manager</designation>
<technology>.NET</technology>
</employee>
</organization>
XML AFTER UPDATE:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<organization>
<employee mode="permanent">
<name>John</name>
<empid>1234</empid>
<designation>SE</designation>
<age>35</age>
</employee>
<employee mode="permanent">
<name>David</name>
<empid>4545</empid>
<designation>Senior Manager</designation>
<age>35</age>
</employee>
<employee mode="permanent">
<name>Steve</name>
<empid>5635</empid>
<designation>Lab Engineer</designation>
<age>38</age>
</employee>
</organization>
If we seen above XML we have modified such as
- Deleting <technology> node from the XML
- Updating attribute value from "contract" to "permanent" for 2nd employee
- Updating <designation> node value from "Manager" to "Senior Manager"
- Adding new <employee> element
Below example java code will be used to modify the XML as per given above.
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class EditXML {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {
editMyXML("D:\\document.xml");
}
public static void editMyXML(String file) throws ParserConfigurationException, SAXException, IOException, TransformerException{
DocumentBuilderFactory builderFac = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFac.newDocumentBuilder();
Document doc = builder.parse(new File(file));
System.out.println ("ROOT: " + doc.getDocumentElement().getNodeName());
NodeList list = doc.getElementsByTagName("employee");
System.out.println("No. Of Employees: " + list.getLength());
for(int i= 0; i<list.getLength(); i++){
Node node = list.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element)node;
String mode, name, empid, designation, technology;
mode = element.getAttribute("mode");
NodeList nListName = element.getElementsByTagName("name");
Element nElementName = (Element)nListName.item(0);
NodeList tListName = nElementName.getChildNodes();
name =((Node)tListName.item(0)).getNodeValue().trim();
NodeList nListEmpId = element.getElementsByTagName("empid");
Element nElementEmpId = (Element)nListEmpId.item(0);
NodeList tListEmpId = nElementEmpId.getChildNodes();
empid = ((Node)tListEmpId.item(0)).getNodeValue().trim();
NodeList nListDesi = element.getElementsByTagName("designation");
Element nElementDesi = (Element)nListDesi.item(0);
NodeList tListDesi = nElementDesi.getChildNodes();
designation = ((Node)tListDesi.item(0)).getNodeValue().trim();
NodeList nListTech = element.getElementsByTagName("technology");
Element nElementTech = (Element)nListTech.item(0);
NodeList tListTech = nElementTech.getChildNodes();
technology =((Node)tListTech.item(0)).getNodeValue().trim();
// Updating only for 4545 (David) Employee
if(empid.equals("4545")){
// Updating MODE from "contract" to "Permanent"
node.getAttributes().getNamedItem("mode").setTextContent("permanent");
// Updating Designation from "Manager" to "Senior Manager"
((Node)tListDesi.item(0)).setTextContent("Senior Manager");
}
// Adding new Node called "age"
Element nElementAge = doc.createElement("age");
nElementAge.appendChild(doc.createTextNode("35"));
element.appendChild(nElementAge);
// Deleting "technology" Node
element.removeChild(nElementTech);
}
}
//Adding new employee
addNewEmployee(doc, "permanent", "Steve", "5635", "Lab Engineer", "38");
// Writing update XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\document.xml"));
transformer.transform(source, result);
}
public static void addNewEmployee(Document doc, String mode, String name, String empId, String designation, String age){
Element root = doc.getDocumentElement();
Element element = doc.createElement("employee");
root.appendChild(element);
Attr attr = doc.createAttribute("mode");
attr.setValue("permanent");
element.setAttributeNode(attr);
Element nElementName = doc.createElement("name");
nElementName.appendChild(doc.createTextNode("Steve"));
element.appendChild(nElementName);
Element nElementEmpId = doc.createElement("empid");
nElementEmpId.appendChild(doc.createTextNode("5635"));
element.appendChild(nElementEmpId);
Element nElementDesi = doc.createElement("designation");
nElementDesi.appendChild(doc.createTextNode("Lab Engineer"));
element.appendChild(nElementDesi);
Element nElementAge = doc.createElement("age");
nElementAge.appendChild(doc.createTextNode("38"));
element.appendChild(nElementAge);
}
}