在这篇文章中, 我们将学习如何使用DOM解析器在Java中更新或修改现有的XML文件。在这个例子中,我们在XML文件中有一个User
元素的列表,我们将用Java程序来修改这些User
元素.
我们要对XML中的每个User
元素进行以下修改。
users.xml
文件假设我们有下面的源XML文件。我们将学习如何在java程序中使用DOM解析器来修改或编辑这个XML文件。
<?xmlversion="1.0"encoding="UTF-8"?>
<Users>
<User>
<id>1</id>
<firstName>Ramesh</firstName>
<lastName>Fadatare</lastName>
<age>28</age>
<gender>Male</gender>
</User>
<User>
<id>2</id>
<firstName>John</firstName>
<lastName>Cena</lastName>
<age>45</age>
<gender>Male</gender>
</User>
<User>
<id>3</id>
<firstName>Tom</firstName>
<lastName>Cruise</lastName>
<age>40</age>
<gender>Male</gender>
</User>
</Users>
下面是使用DOM解析器完成上述所有更新的java程序.
package net.javaguides.javaxmlparser.dom;
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.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
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 ModifyXMLFileInJava {
public static void main(String[] args) {
String filePath = "users.xml";
File xmlFile = new File(filePath);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
try {
dBuilder = dbFactory.newDocumentBuilder();
// parse xml file and load into document
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
// update Element value
updateElementValue(doc);
// delete element
deleteElement(doc);
// add new element
addElement(doc);
// write the updated document to file or console
writeXMLFile(doc);
} catch (SAXException | ParserConfigurationException | IOException | TransformerException e1) {
e1.printStackTrace();
}
}
private static void writeXMLFile(Document doc)
throws TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException {
doc.getDocumentElement().normalize();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("users_updated.xml"));
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(source, result);
System.out.println("XML file updated successfully");
}
/**
* Add a new element salary to user element.
* @param doc
*/
private static void addElement(Document doc) {
NodeList users = doc.getElementsByTagName("User");
Element emp = null;
// loop for each user
for (int i = 0; i < users.getLength(); i++) {
emp = (Element) users.item(i);
Element salaryElement = doc.createElement("salary");
salaryElement.appendChild(doc.createTextNode("10000"));
emp.appendChild(salaryElement);
}
}
/**
* Delete gender element from User element
* @param doc
*/
private static void deleteElement(Document doc) {
NodeList users = doc.getElementsByTagName("User");
Element user = null;
// loop for each user
for (int i = 0; i < users.getLength(); i++) {
user = (Element) users.item(i);
Node genderNode = user.getElementsByTagName("gender").item(0);
user.removeChild(genderNode);
}
}
/**
* Update firstName element value to Upper case.
* @param doc
*/
private static void updateElementValue(Document doc) {
NodeList users = doc.getElementsByTagName("User");
Element user = null;
// loop for each user
for (int i = 0; i < users.getLength(); i++) {
user = (Element) users.item(i);
Node name = user.getElementsByTagName("firstName").item(0).getFirstChild();
name.setNodeValue(name.getNodeValue().toUpperCase());
}
}
}
<?xmlversion="1.0"encoding="UTF-8"standalone="no"?>
<Users>
<User>
<id>1</id>
<firstName>RAMESH</firstName>
<lastName>Fadatare</lastName>
<age>28</age>
<salary>10000</salary>
</User>
<User>
<id>2</id>
<firstName>JOHN</firstName>
<lastName>Cena</lastName>
<age>45</age>
<salary>10000</salary>
</User>
<User>
<id>3</id>
<firstName>TOM</firstName>
<lastName>Cruise</lastName>
<age>40</age>
<salary>10000</salary>
</User>
</Users>
请注意,我们在User
元素中添加了一个新的 "工资 "字段,我们将firstName
从小写字母更新为大写字母,并且从用户标签中删除了gender
元素。
查看以前的文章 - 如何使用DOM解析器在Java中读取XML文件和如何使用DOM解析器在Java中创建XML文件
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/10/how-to-modify-or-update-xml-file-in-java-dom-parser.html
内容来源于网络,如有侵权,请联系作者删除!