Home >Backend Development >XML/RSS Tutorial >Java&Xml Tutorial (3) Using DOM to modify XML file content
DOM parsing method can also be used to modify XML data. We can use it to complete operations such as adding elements, deleting elements, modifying element values, modifying element attributes, etc.
Our XML file has the following content:
employee.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees> <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>CSS Developer</role> <gender>Female</gender> </Employee></Employees>
We will modify the content of the XML file:
1. According to the employee’s gender (gender) Modify the "id" attribute value, add "M" to the id attribute value if the gender is male (Male), and add "F" to the id attribute value if the gender is female (Female).
2. Modify the value of the name element and make it all uppercase.
3. The "gender" element has no meaning anymore, we delete it.
4. Add a "salary" node under the employee node.
When we complete the above operations, save the content in a new xml file.
The following is the Java program code that uses DOM mode to parse:
ModifyXMLDOM.java
package com.journaldev.xml; 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.OutputKeys;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.Document;import org.w3c.dom.Element; import org.w3c.dom.Node;import org.w3c.dom.NodeList; import org.xml.sax.SAXException;public class ModifyXMLDOM { public static void main(String[] args) { String filePath = "employee.xml"; File xmlFile = new File(filePath); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xmlFile); doc.getDocumentElement().normalize(); //update attribute value updateAttributeValue(doc); //update Element value updateElementValue(doc); //delete element deleteElement(doc); //add new element addElement(doc); //write the updated document to file or console doc.getDocumentElement().normalize(); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("employee_updated.xml")); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); System.out.println("XML file updated successfully"); } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) { e1.printStackTrace(); } } private static void addElement(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); Element salaryElement = doc.createElement("salary"); salaryElement.appendChild(doc.createTextNode("10000")); emp.appendChild(salaryElement); } } private static void deleteElement(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); Node genderNode = emp.getElementsByTagName("gender").item(0); emp.removeChild(genderNode); } } private static void updateElementValue(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); Node name = emp.getElementsByTagName("name").item(0).getFirstChild(); name.setNodeValue(name.getNodeValue().toUpperCase()); } } private static void updateAttributeValue(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); String gender = emp.getElementsByTagName("gender").item(0).getFirstChild().getNodeValue(); if(gender.equalsIgnoreCase("male")){ //prefix id attribute with M emp.setAttribute("id", "M"+emp.getAttribute("id")); }else{ //prefix id attribute with F emp.setAttribute("id", "F"+emp.getAttribute("id")); } } } }
Output xml file content:
employee_updated.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees> <Employee id="M1"> <name>PANKAJ</name> <age>29</age> <role>Java Developer</role> <salary>10000</salary></Employee> <Employee id="F2"> <name>LISA</name> <age>35</age> <role>CSS Developer</role> <salary>10000</salary></Employee></Employees>
Original address: http: //www.php.cn/
DOM parsing method can also be used to modify XML data. We can use it to complete operations such as adding new elements, deleting elements, modifying element values, modifying element attributes, etc.
The content of our XML file is as follows:
employee.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees> <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>CSS Developer</role> <gender>Female</gender> </Employee></Employees>
We will modify the content of the XML file:
1. Modify the "id" attribute value according to the employee's gender (gender) , add "M" to the id attribute value for male (Male), and add "F" to the id attribute value for female (Female).
2. Modify the value of the name element and make it all uppercase.
3. The "gender" element has no meaning anymore, we delete it.
4. Add a "salary" node under the employee node.
When we complete the above operations, save the content in a new xml file.
The following is the Java program code parsed using DOM mode:
ModifyXMLDOM.java
package com.journaldev.xml; 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.OutputKeys; 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.Document;import org.w3c.dom.Element; import org.w3c.dom.Node;import org.w3c.dom.NodeList; import org.xml.sax.SAXException;public class ModifyXMLDOM { public static void main(String[] args) { String filePath = "employee.xml"; File xmlFile = new File(filePath); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xmlFile); doc.getDocumentElement().normalize(); //update attribute value updateAttributeValue(doc); //update Element value updateElementValue(doc); //delete element deleteElement(doc); //add new element addElement(doc); //write the updated document to file or console doc.getDocumentElement().normalize(); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("employee_updated.xml")); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); System.out.println("XML file updated successfully"); } catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) { e1.printStackTrace(); } } private static void addElement(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); Element salaryElement = doc.createElement("salary"); salaryElement.appendChild(doc.createTextNode("10000")); emp.appendChild(salaryElement); } } private static void deleteElement(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); Node genderNode = emp.getElementsByTagName("gender").item(0); emp.removeChild(genderNode); } } private static void updateElementValue(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); Node name = emp.getElementsByTagName("name").item(0).getFirstChild(); name.setNodeValue(name.getNodeValue().toUpperCase()); } } private static void updateAttributeValue(Document doc) { NodeList employees = doc.getElementsByTagName("Employee"); Element emp = null; //loop for each employee for(int i=0; i<employees.getLength();i++){ emp = (Element) employees.item(i); String gender = emp.getElementsByTagName("gender").item(0).getFirstChild().getNodeValue(); if(gender.equalsIgnoreCase("male")){ //prefix id attribute with M emp.setAttribute("id", "M"+emp.getAttribute("id")); }else{ //prefix id attribute with F emp.setAttribute("id", "F"+emp.getAttribute("id")); } } } }
Output xml file content:
employee_updated.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employees> <Employee id="M1"> <name>PANKAJ</name> <age>29</age> <role>Java Developer</role> <salary>10000</salary></Employee> <Employee id="F2"> <name>LISA</name> <age>35</age> <role>CSS Developer</role> <salary>10000</salary></Employee></Employees>
The above is the Java&Xml tutorial ( 3) Use the DOM method to modify the content of the XML file. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!