Đọc tập tin XML sử dụng DOM
DOM là tập hợp những interface giúp chúng ta có thể dễ dàng truy cập và chỉnh sửa cấu trúc, nội dung của một tập tin XML. Trong bài viết này, chúng ta sẽ tìm hiểu làm thế nào để đọc tập tin XML sử dụng DOM các bạn nhé! DOM interfaces DOM định nghĩa một vài Java interfaces, ...
DOM là tập hợp những interface giúp chúng ta có thể dễ dàng truy cập và chỉnh sửa cấu trúc, nội dung của một tập tin XML. Trong bài viết này, chúng ta sẽ tìm hiểu làm thế nào để đọc tập tin XML sử dụng DOM các bạn nhé!
DOM interfaces
DOM định nghĩa một vài Java interfaces, bên dưới là một số interface mà chúng ta thường dùng khi làm việc với nó:
- Document
- Node
- Element
- Attr
- Text
Mình sẽ giải thích từng interface này khi chúng ta đi vào một ví dụ cụ thể.
Ví dụ đọc tập tin XML sử dụng DOM
Để các bạn dễ hình dung, mình sẽ tạo và làm việc với một project Maven để minh họa cho bài viết này.
Mình có project như sau:
Tập tin XML chúng ta cần đọc là students.xml có nội dung như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
XHTML <?xml version="1.0" encoding="UTF-8" standalone="no"?> <students> <student n0='1'> <name>John</name> <code>12345</code> <age>19</age> </student> <student n0='2'> <name>Marry</name> <code>23456</code> <age>24</age> </student> </students> |
Tập tin này chứa thông tin của 2 sinh viên bao gồm tên (name), mã sinh viên (code) và tuổi (age) của mỗi sinh viên. Mỗi sinh viên sẽ được đánh số thứ tự thông qua thuộc tính n0.
OK, giờ chúng ta bắt đầu đọc tập tin này các bạn nhé!
Đầu tiên, để có thể đọc được tập tin students.xml, chúng ta cần phải khởi tạo đối tượng File cho tập tin này:
1 2 3 |
File f = new File("students.xml"); |
Tiếp theo, chúng ta cần khởi tạo đối tượng Document chứa thông tin của tập tin XML từ đối tượng File đã được tạo ra ở trên
1 2 3 4 5 6 |
Java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = factory.newDocumentBuilder(); Document doc = buider.parse(f); |
Để đọc tập tin XML với DOM, chúng ta sẽ đọc từng thẻ của nó từ ngoài vào trong theo thứ tự phân cấp của chúng.
Trong tập tin students.xml thì thẻ students là thẻ ngoài cùng nhất, hay còn gọi là root element. Để đọc được thẻ này chúng ta dùng phương thức sau:
1 2 3 |
Element students = doc.getDocumentElement(); |
Trong DOM, một thẻ được xác định là một Element.
Bây giờ, chúng ta đã có thông tin của thẻ students rồi, để lấy thông tin của các thẻ student, chúng ta sẽ dùng thẻ students để lấy chúng.
1 2 3 |
NodeList studentList = students.getElementsByTagName("student"); |
Đối tượng NodeList sẽ chứa thông tin 2 thẻ student có trong tập tin XML. Bây giờ chúng ta sẽ đi qua từng thẻ để đọc thông tin của chúng:
1 2 3 4 5 6 7 8 9 10 |
Java for (int i = 0; i < studentList.getLength(); i++) { Node node = studentList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element student = (Element) node; } } |
Một Node là một nút trong cây DOM của chúng ta. Chúng ta cần đưa nó về đối tượng Element để sử dụng.
OK, giờ chúng ta đã có đối tượng chứa thông tin của các thẻ student. Nhiệm vụ bây giờ là chúng ta đọc chúng thôi.
Để đọc được thuộc tính số thứ tự, chúng ta chỉ cần làm như sau:
1 2 3 |
student.getAttribute("n0"); |
với n0 là tên của thuộc tính.
Bởi vì bây giờ chúng ta đang đọc thẻ student và mỗi thẻ student chỉ có một thẻ con cho tên, mã sinh viên và tuổi nên chúng ta có thể đọc những thông tin này như sau:
Thẻ tên:
1 2 3 |
student.getElementsByTagName("name").item(0).getTextContent(); |
Thẻ mã sinh viên:
1 2 3 |
student.getElementsByTagName("code").item(0).getTextContent(); |
Thẻ tuổi:
1 2 3 |
student.getElementsByTagName("age").item(0).getTextContent(); |
OK, chúng ta đã hoàn thành việc đọc tập tin students.xml, các bạn có thể tham khảo đầy đủ code như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Java package com.huongdanjava; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; 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 DomExample { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { File f = new File("students.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = factory.newDocumentBuilder(); Document doc = buider.parse(f); Element students = doc.getDocumentElement(); NodeList studentList = students.getElementsByTagName("student"); for (int i = 0; i < studentList.getLength(); i++) { Node node = studentList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element student = (Element) node; System.out.println("n0: " + student.getAttribute("n0")); System.out.println("name: " + student.getElementsByTagName("name").item(0).getTextContent()); System.out.println("code: " + student.getElementsByTagName("code").item(0).getTextContent()); System.out.println("age: " + student.getElementsByTagName("age").item(0).getTextContent()); System.out.println("
"); } } } } |
Techtalk talk via huongdanjava