Đọc Tập Tin XML Sử Dụng DOM Trong Java

Views: 4.314

DOM (Document Object Model) là tập hợp những interface của Java 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 trong Java các bạn nhé!

Đầu tiên, mình sẽ liệt kê một số interface mà chúng ta thường dùng khi làm việc với DOM:

  • org.w3c.dom.Document
  • org.w3c.dom.Node
  • org.w3c.dom.Element
  • org.w3c.dom.Attr
  • org.w3c.dom.Text

Mỗi một interface này sẽ có một hoặc nhiều class khác nhau implement nó tuỳ theo cấu trúc của nội dung XML mà chúng ta cần process các bạn nhé!

Tiếp theo, mình sẽ tạo và làm việc với một project Maven để minh họa cho việc đọc tập tin XML sử dụng DOM.

Mình có project như sau:

Đọc tập tin XML sử dụng DOM trong Java

Tập tin XML chúng ta cần đọc là students.xml có nội dung như sau:

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>
12345678910111213 <?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:

Java File f = new File("students.xml");
1 Filef=newFile("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:

Java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = factory.newDocumentBuilder(); Document doc = buider.parse(f);
123 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:

Java Element students = doc.getDocumentElement();
1 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.

Java NodeList studentList = students.getElementsByTagName("student");
1 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:

Java for (int i = 0; i < studentList.getLength(); i++) { Node node = studentList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element student = (Element) node; } }
123456 for(inti=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:

Java student.getAttribute("n0");
1 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ẻ <name>:
Java student.getElementsByTagName("name").item(0).getTextContent();
1 student.getElementsByTagName("name").item(0).getTextContent();
  • Thẻ <code>:
Java student.getElementsByTagName("code").item(0).getTextContent();
1 student.getElementsByTagName("code").item(0).getTextContent();
  • Thẻ <age>:
Java student.getElementsByTagName("age").item(0).getTextContent();
1 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:

Java package com.huongdanjava.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 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("\n"); } } } }
123456789101112131415161718192021222324252627282930313233343536373839404142 packagecom.huongdanjava.dom; importjava.io.File;importjava.io.IOException; importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException; importorg.w3c.dom.Document;importorg.w3c.dom.Element;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException; publicclassDOMExample{ publicstaticvoidmain(String[]args)throwsParserConfigurationException,SAXException,IOException{Filef=newFile("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(inti=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("\n");}}}}

Kết quả:

Đọc tập tin XML sử dụng DOM trong Java

4.5/5 - (4 bình chọn)

Từ khóa » đọc Ghi File Xml Trong Java