Java DOM Parser – đọc, tạo, sửa tài liệu XML – VietTuts

Bài này hướng dẫn bạn sử dụng Java DOM Parser – đọc, tạo, sửa tại liệu XML.

Mô hình đối tượng tài liệu (DOM) là một đề xuất chính thức của World Wide Web Consortium (W3C). Nó định nghĩa một interface cho phép các chương trình truy cập và cập nhật cấu trúc và nội dung của các tài liệu XML.

Bạn nên sử dụng trình phân tích cú pháp DOM khi:

Khi bạn phân tích cú pháp một tài liệu XML bằng DOM parser, bạn có được cấu trúc cây chứa tất cả các phần tử của tài liệu XML. DOM cung cấp nhiều chức năng mà bạn có thể sử dụng để kiểm tra nội dung và cấu trúc của tài liệu XML.

DOM là một giao diện chung để thao tác cấu trúc tài liệu XML. Một trong những mục tiêu thiết kế của nó là giúp Java code được viết cho một trình phân tích cú pháp tuân thủ DOM sẽ chạy trên bất kỳ trình phân tích cú pháp tuân thủ DOM nào khác mà không phải thực hiện bất kỳ sửa đổi nào.

DOM định nghĩa một số interface. Dưới đây là các interface phổ biến nhất:

Khi bạn làm việc với DOM, có một số phương thức bạn sẽ sử dụng thường xuyên:

Sau đây là các bước được sử dụng trong khi phân tích cú pháp một tài liệu bằng cách sử dụng DOM Parser.

Tạo đối tượng Document từ một file:

Tạo đối tượng Document từ một stream:

Ví dụ: phân tích tập tin XML có nội dung như sau:

Tạo lớp Student.java

File DOMExample.java

package vn.viettuts.javaxml;

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class DOMExample {
    public static void main(String[] args) {
        List<Student> listStudents = DOMExample.readListStudents();
        // hiển thị các đối tượng student ra màn hình
        for (Student student : listStudents) {
            System.out.println(student.toString());
        }
    }

    public static List<Student> readListStudents() {
        List<Student> listStudents = new ArrayList<>();
        Student student = null;

        try {
            // đọc file input.xml
            File inputFile = new File("D:\\xml\\input.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(inputFile);
            doc.getDocumentElement().normalize();

            // in phần tử gốc ra màn hình
            System.out.println("Phần tử gốc:" 
                    + doc.getDocumentElement().getNodeName());

            // đọc tất cả các phần tử có tên thẻ là "student"
            NodeList nodeListStudent = doc.getElementsByTagName("student");

            // duyệt các phần tử student
            for (int i = 0; i < nodeListStudent.getLength(); i++) {
                // tạo đối tượng student
                student = new Student();
                // đọc các thuộc tính của student
                Node nNode = nodeListStudent.item(i);
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    student.setId(eElement.getAttribute("id"));
                    student.setFirstName(eElement.getElementsByTagName("firstname")
                            .item(0).getTextContent());
                    student.setLastName(eElement.getElementsByTagName("lastname")
                            .item(0).getTextContent());
                    student.setMarks(eElement.getElementsByTagName("marks")
                            .item(0).getTextContent());
                }
                // add đối tượng student vào listStudents
                listStudents.add(student);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listStudents;
    }
}