Trong bài viết trước, chúng ta đã cùng tìm hiểu làm thế nào để đọc được một tập tin XML sử dụng DOM trong Java. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo mới tập tin XML sử dụng DOM các bạn nhé!
Các bước để tạo mới một tập tin XML sử dụng DOM bao gồm:
- Dùng đối tượng DocumentBuilder để định nghĩa nội dung của tập tin XML
- Dùng đối tượng Transformer để ghi tập tin XML xuống ổ đĩa.
Trong bài viết này, chúng ta sẽ đi vào ví dụ cụ thể để tạo tập tin XML có nội dung như sau:
1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <students> <student n0='1'> <name>John</name> <code>12345</code> <age>19</age> </student> </students> |
Định nghĩa nội dung tập tin XML
Đầu tiên chúng ta sẽ tạo mới một đối tượng Document từ đối tượng DocumentBuilder trước.
1 2 3 |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = factory.newDocumentBuilder(); Document doc = buider.newDocument(); |
Trong tập tin XML trên, thẻ students là thẻ ngoài cùng nhất, root element. Do đó chúng ta sẽ thêm thẻ này trước.
1 2 |
Element students = doc.createElement("students"); doc.appendChild(students); |
Bây giờ chúng ta sẽ thêm thẻ student nằm bên trong thẻ students:
1 2 |
Element student = doc.createElement("student"); students.appendChild(student); |
Để thêm thuộc tính n0=”1″ cho thẻ student, chúng ta sẽ sử dụng đối tượng Attr:
1 2 3 |
Attr attr = doc.createAttribute("n0"); attr.setValue("1"); student.setAttributeNode(attr); |
Bên trong thẻ student chúng ta lại có thêm các thẻ tên (name), mã sinh viên (code) và tuổi (age), nên nhiệm vụ còn lại của chúng ta là tạo 3 Element cho 3 thẻ đó và thêm chúng vào thẻ student mà thôi.
Thẻ name:
1 2 3 |
Element name = doc.createElement("name"); name.appendChild(doc.createTextNode("John")); student.appendChild(name); |
Thẻ code:
1 2 3 |
Element code = doc.createElement("code"); code.appendChild(doc.createTextNode("12345")); student.appendChild(code); |
Thẻ age:
1 2 3 |
Element age = doc.createElement("age"); age.appendChild(doc.createTextNode("19")); student.appendChild(age); |
Ghi tập tin XML xuống ổ đĩa
Bằng cách sử dụng đối tượng Transformer, chúng ta sẽ ghi nội dung của tập tin xuống ổ đĩa nơi do chúng ta chỉ định.
Đầu tiên chúng ta cần đối tượng Transformer trước:
1 2 |
TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); |
Trong đối tượng Transformer, nó có một phương thức với tên gọi là transform() với hai tham số là interface Source (được tạo ra từ đối tượng Document chứa nội dung của tập tin XML) và interface Result (chứa thông tin về tập tin XML sau khi được ghi xuống ổ đĩa) để thực hiện việc ghi tập tin XML xuống ổ đĩa.
Chúng ta sẽ tạo đối tượng DOMSource (đối tượng này hiện thực interface Source) để chứa nội dung của tập tin:
1 |
DOMSource source = new DOMSource(doc); |
Và đối tượng StreamResult (hiện thực interface Result) chứa thông tin của tập tin XML:
1 2 |
File f = new File("D://students.xml"); StreamResult result = new StreamResult(f); |
Bây giờ chúng ta có thể gọi phương thức transform() của đối tượng Transformer để thực hiện việc ghi nội dung tập tin xuống ổ đĩa rồi:
1 |
transformer.transform(source, result); |
Đầ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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
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 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.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; public class DomExample { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = factory.newDocumentBuilder(); Document doc = buider.newDocument(); // Tạo thẻ students Element students = doc.createElement("students"); doc.appendChild(students); // Tạo thẻ student Element student = doc.createElement("student"); students.appendChild(student); // Tạo thuộc tính n0=1 Attr attr = doc.createAttribute("n0"); attr.setValue("1"); student.setAttributeNode(attr); // Thêm thẻ name Element name = doc.createElement("name"); name.appendChild(doc.createTextNode("John")); student.appendChild(name); // Thẻ code Element code = doc.createElement("code"); code.appendChild(doc.createTextNode("12345")); student.appendChild(code); // Thẻ age Element age = doc.createElement("age"); age.appendChild(doc.createTextNode("19")); student.appendChild(age); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); File f = new File("E://students.xml"); StreamResult result = new StreamResult(f); transformer.transform(source, result); } } |
Kết quả: