在Java中修改XML文件(DOM分析器)
时间:2020-02-23 14:37:21 来源:igfitidea点击:
我们可以使用DOM解析器修改Java中的XML文件。
我们可以使用DOM Parser在Java中的XML文档中添加元素,删除元素,编辑元素值,编辑属性。
修改Java中的XML文件
假设我们有下面的源XML文件。
我们将学习如何使用DOM解析器在Java程序中修改或者编辑此XML文件。
employee.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Employees> <Employee id="1"> <name>hyman</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>
我们将通过以下更改来编辑XML文件。
根据性别更新所有员工的" id"属性值。
对于男性,id将以" M"为前缀,否则以" F"为前缀。通过使用大写字母来更新"名称"元素的值。
删除"性别"元素,因为它现在不使用。
向xml中的所有employee节点添加一个新元素" salary"。
对XML进行以上修改后,我们会将其保存到其他文件中。
这是使用DOM分析器进行上述所有更新的Java程序。
ModifyXMLDOM.java
package com.theitroad.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")); } } } }
下面给出了来自上述程序的XML文件的输出修改版本。
employee_updated.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Employees> <Employee id="M1"> <name>hyman</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>