[Java Xml] Chỉnh sửa file Xml có sẵn với DOM Parser

Chào các bạn, trong bài viết này, chúng ta sẽ cùng tìm hiểu về cách chỉnh sửa file Xml có sẵn với DOM Parser

  1. Thêm element mới
  2. Cập nhật attribute của element có sẵn
  3. Cập nhật giá trị của element có sẵn
  4. Xóa element có sẵn
1. XML file
Xem qua nội dung của file Xml trước và sau khi được xử lý

File : file.xml – File Xml gốc.
XML:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<company>
   <staff id="1">
    <firstname>yong</firstname>
    <lastname>mook kim</lastname>
    <nickname>mkyong</nickname>
    <salary>100000</salary>
   </staff>
</company>

Sau đó, chỉnh sửa bằng DOM XML Parser
  1. Cập nhật attribute id của element staff = 2
  2. Cập nhật giá trị của element salary = 200000
  3. Thêm element “age” vào cuối element staff
  4. Xóa element “firstname” trong eleement staff
File : file.xml – File sau khi xử lý
Java:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<company>
   <staff id="2">
    <lastname>mook kim</lastname>
    <nickname>mkyong</nickname>
    <salary>2000000</salary>
        <age>28</age>
   </staff>
</company>

2. DOM Parser
Sử dụng DOM XML parser để chỉnh sửa file XML


ModifyXMLFile.java
Java:
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.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class ModifyXMLFile {

    public static void main(String argv[]) {

       try {
        String filepath = "c:\\file.xml";
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(filepath);

        // Get the root element
        Node company = doc.getFirstChild();

        // Get the staff element , it may not working if tag has spaces, or
        // whatever weird characters in front...it's better to use
        // getElementsByTagName() to get it directly.
        // Node staff = company.getFirstChild();

        // Get the staff element by tag name directly
        Node staff = doc.getElementsByTagName("staff").item(0);

        // update staff attribute
        NamedNodeMap attr = staff.getAttributes();
        Node nodeAttr = attr.getNamedItem("id");
        nodeAttr.setTextContent("2");

        // append a new node to staff
        Element age = doc.createElement("age");
        age.appendChild(doc.createTextNode("28"));
        staff.appendChild(age);

        // loop the staff child node
        NodeList list = staff.getChildNodes();

        for (int i = 0; i < list.getLength(); i++) {
            
                   Node node = list.item(i);

           // get the salary element, and update the value
           if ("salary".equals(node.getNodeName())) {
            node.setTextContent("2000000");
           }

                   //remove firstname
           if ("firstname".equals(node.getNodeName())) {
            staff.removeChild(node);
           }

        }

        // write the content into xml file
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(new File(filepath));
        transformer.transform(source, result);

        System.out.println("Done");

       } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
       } catch (TransformerException tfe) {
        tfe.printStackTrace();
       } catch (IOException ioe) {
        ioe.printStackTrace();
       } catch (SAXException sae) {
        sae.printStackTrace();
       }
    }
}

Cám ơn các bạn đã theo dõi. Hẹn gặp lại các bạn trong các bài viết sau

Bài viết tham khảo tại: https://mkyong.com/java/how-to-modify-xml-file-in-java-dom-parser
 

Bình luận