如何在Java中修改或更新XML文件 - DOM解析器

x33g5p2x  于2022-10-06 转载在 Java  
字(4.9k)|赞(0)|评价(0)|浏览(465)

在这篇文章中, 我们将学习如何使用DOM解析器在Java中更新或修改现有的XML文件。在这个例子中,我们在XML文件中有一个User元素的列表,我们将用Java程序来修改这些User元素.

我们要对XML中的每个User元素进行以下修改。

  1. 添加一个新元素
  2. 更新现有元素的值
  3. 删除现有元素

开发过程步骤

  1. 现有的users.xml文件
  2. 使用DOM解析器更新现有的XML文件的程序
  3. 更新的 users.xml 文件

1. 现有的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>

2. 使用DOM解析器更新现有的XML文件的程序

下面是使用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());
        }
    }
}

3. 更新 users.xml 文件

<?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文件

相关文章

微信公众号

最新文章

更多