Mục lục
XML là một định dạng file phổ biến hiện nay, do vậy các Java developer chắc hẳn có lúc cần phải xử lý các file XML để rút trích dữ liệu, hay tạo ra các tài liệu XML theo định dạng được yêu cầu. Trong bài viết này chúng ta sẽ cùng tìm hiểu cách đọc file XML trong Java sử dụng DOM XML parser.
Đọc file XML
Mặc định Java đã hỗ trợ đọc file XML thông qua DOM XML parser. DOM XML parser sẽ phân tích dữ liệu trong file XML và tải toàn bộ chúng vào bộ nhớ. Sau đó mô hình hóa nó theo cấu trúc “TREE” để để dàng duyệt các phần tử trong đó.
Vì DOM XML parser tải lên toàn bộ nội dung của XML để xử lý do đó chúng ta nên cân nhắc khi xử lý một file XML có dung lượng lớn.
Giả sử có file input.xml sau cần đọc
<?xml version = "1.0"?> <class> <student rollno = "400"> <firstname>Nguyen</firstname> <lastname>Hai</lastname> <nickname>deft</nickname> <marks>12</marks> </student> <student rollno = "103"> <firstname>Nguyen</firstname> <lastname>Tu</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno = "593"> <firstname>Le</firstname> <lastname>dung</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
Sử dụng DOM XML theo đoạn code mẫu sau
import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; public class Main { public static void main(String[] args) { try { File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("student"); System.out.println("----------------------------"); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); System.out.println("\nCurrent Element :" + nNode.getNodeName()); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("Student roll no : " + eElement.getAttribute("rollno")); System.out.println("First Name : " + eElement .getElementsByTagName("firstname") .item(0) .getTextContent()); System.out.println("Last Name : " + eElement .getElementsByTagName("lastname") .item(0) .getTextContent()); System.out.println("Nick Name : " + eElement .getElementsByTagName("nickname") .item(0) .getTextContent()); System.out.println("Marks : " + eElement .getElementsByTagName("marks") .item(0) .getTextContent()); } } } catch (Exception e) { e.printStackTrace(); } } }
Output:
Root element :class ---------------------------- Current Element :student Student roll no : 400 First Name : Nguyen Last Name : Hai Nick Name : deft Marks : 12 Current Element :student Student roll no : 103 First Name : Nguyen Last Name : Tu Nick Name : vinni Marks : 95 Current Element :student Student roll no : 593 First Name : Le Last Name : dung Nick Name : jazz Marks : 90
Ghi file XML
Để ghi file XML sử dụng DOM XML parser, theo dõi đoạn mã sau:
import java.io.File; 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; public class Main { public static final String xmlFilePath = "output.xml"; public static void main(String argv[]) { try { DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder(); Document document = documentBuilder.newDocument(); // root element Element root = document.createElement("company"); document.appendChild(root); // employee element Element employee = document.createElement("employee"); root.appendChild(employee); // set an attribute to staff element Attr attr = document.createAttribute("id"); attr.setValue("10"); employee.setAttributeNode(attr); //you can also use staff.setAttribute("id", "1") for this // firstname element Element firstName = document.createElement("firstname"); firstName.appendChild(document.createTextNode("Nguyen")); employee.appendChild(firstName); // lastname element Element lastname = document.createElement("lastname"); lastname.appendChild(document.createTextNode("Hai")); employee.appendChild(lastname); // email element Element email = document.createElement("nickname"); email.appendChild(document.createTextNode("deft")); employee.appendChild(email); // department elements Element department = document.createElement("marks"); department.appendChild(document.createTextNode("95")); employee.appendChild(department); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource domSource = new DOMSource(document); StreamResult streamResult = new StreamResult(new File(xmlFilePath)); transformer.transform(domSource, streamResult); System.out.println("Done creating XML File"); } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (TransformerException tfe) { tfe.printStackTrace(); } } }
Output: output.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <company> <employee id="10"> <firstname>Nguyen</firstname> <lastname>Hai</lastname> <nickname>deft</nickname> <marks>95</marks> </employee> </company>
Nguồn
https://mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/