Trong bài viết này, mình sẽ hướng dẫn các bạn làm thế nào để chỉnh sửa tập tin XML sử dụng DOM thông qua một ví dụ cụ thể là sửa 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> |
Các thông tin sẽ chỉnh sửa
Mình sẽ chỉnh sửa một số thứ như sau:
- Sửa số thứ tự của sinh viên (thuộc tính n0) là 2.
- Sửa tên của sinh viên là Khanh.
- Thêm thẻ email với giá trị (huongdanjava.com@gmail.com)
- Xóa thẻ tuổi (age).
Sau khi chỉnh sửa, tập tin XML của mình sẽ 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='2'> <name>Khanh</name> <code>12345</code> <email>huongdanjava.com@gmail.com</email> </student> </students> |
Thực hiện việc chỉnh sửa
Tương tự như trong bài viết tạo mới tập tin XML, để chỉnh sửa một tập tin XML chúng ta cũng dùng DocumentBuilder để tải tập tin XML lên và thực hiện việc chỉnh sửa, sau đó sẽ dùng đối tượng Transformer để thực hiện việc lưu lại việc chỉnh sửa.
Đầu tiên chúng ta sẽ dùng đối tượng DocumentBuider để tạo đối tượng Document và tải tập tin XML lên:
1 2 3 4 5 |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder buider = factory.newDocumentBuilder(); File f = new File("students.xml"); Document doc = buider.parse(f); |
Tất cả các thông tin chúng ta cần chỉnh sửa đều nằm trong thẻ student, do đó chúng ta phải lấy thông tin của thẻ này trước:
1 |
Element student = (Element) doc.getElementsByTagName("student").item(0); |
Bây giờ chúng ta sẽ cập nhập thuộc tính n0:
1 2 3 |
NamedNodeMap attr = student.getAttributes(); Node nodeAttr = attr.getNamedItem("n0"); nodeAttr.setTextContent("2"); |
Để cập nhập thông tin thẻ name, chúng ta phải lấy thẻ này trước từ thẻ student:
1 |
Element name = (Element) student.getElementsByTagName("name").item(0); |
Sau đó, chúng ta sẽ gán giá trị cho thẻ này như sau:
1 |
name.setTextContent("Khanh"); |
Tiếp theo, chúng ta sẽ thêm thẻ email trong thẻ student nhé các bạn:
1 2 3 |
Element email = doc.createElement("email"); email.appendChild(doc.createTextNode("huongdanjava.com@gmail.com")); student.appendChild(email); |
Và xóa thẻ age trong thẻ student:
1 2 |
Element age = (Element) student.getElementsByTagName("age").item(0); student.removeChild(age); |
OK, lúc này chúng ta đã hoàn thành việc chỉnh sửa, việc còn lại là lưu nội dung đã chỉnh sửa xuống đĩa mà thôi:
1 2 3 4 5 6 |
TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(f); transformer.transform(source, result); |
Toàn bộ code sẽ 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 |
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.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; 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(); File f = new File("E://students.xml"); Document doc = buider.parse(f); Element student = (Element) doc.getElementsByTagName("student").item(0); // Cập nhập thuộc tính n0 NamedNodeMap attr = student.getAttributes(); Node nodeAttr = attr.getNamedItem("n0"); nodeAttr.setTextContent("2"); // Cập nhập thẻ name Element name = (Element) student.getElementsByTagName("name").item(0); name.setTextContent("Khanh"); // Thêm thẻ email Element email = doc.createElement("email"); email.appendChild(doc.createTextNode("huongdanjava.com@gmail.com")); student.appendChild(email); // Xóa thẻ age Element age = (Element) student.getElementsByTagName("age").item(0); student.removeChild(age); // Ghi xuống ổ đĩa TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(f); transformer.transform(source, result); } } |
Kết quả: