- vừa được xem lúc

[Object-Oriented + Java] Bài viết #9 - XML DOM Parser

0 0 31

Người đăng: Semi Dev

Theo Viblo Asia

Nếu như bạn đã đồng hành từ Series bài viết đầu tiên thì tính tới thời điểm này, chắc chắn là chưa có một bài viết nào trong số mà mình chia sẻ tại đây có ví dụ liên quan tới XML. Tuy nhiên, như trước đó cũng đã nhắc đến trong bài hướng dẫn về gửi yêu cầu XMLHttpRequest của Sub-Series JavaScript thì XML là một ngôn ngữ sử dụng để mô tả dữ liệu và có cú pháp dạng đánh dấu bằng các thẻ tag giống như HTML.

Đây là một ví dụ đơn giản về một tệp .xml mô tả nội dung về các bìa sách đang được lưu trữ trông thư mục bookstore-manager-java mà mình đang thực hiện:

<?xml version="1.0" encoding="UTF-8" standalone="yes"
?> <!-- comment --> <table> <record id="000000000" category-id="000000000"> <title> Hrdaya Sutra </title> <author> Buddhism </author> <description> One of the most popular Mahayana Buddhist sutra. </description> </record> <record id="000000001" category-id="000000000"> <title> Yoga Sutra </title> <author> Patanjali </author> <description> One of the most popular Yoga book. </description> </record> </table>

Điểm lưu ý duy nhất, đó là so với HTML thì ở đây tất cả các tên thẻ và các thuộc tính đều là do chúng ta tự đặt ra để phù hợp với mục đích quản lý dữ liệu. Thay vì cú pháp mô tả các object dữ liệu ở dạng JSON thì ở đây chúng ta đang mô tả lại các object ở dạng: các mảnh thông tin chính được đánh dấu bởi các thẻ và các thông tin bổ sung ở dạng tham chiếu được mô tả bởi các thuộc tính.

Khi nạp nội dung XML này vào môi trường trình duyệt web thì chúng ta sẽ có thể chuyển về cấu trúc HTML DOM và thực hiện các thao tác truy vấn, chỉnh sửa, giống như đối với các object HTMLElement thông thường; Còn đối với các môi trường lập trình khác, ví dụ như Java ở đây thì chúng ta sẽ có thể có thêm vài lựa chọn mặc định, tùy vào thư viện tiêu chuẩn được cung cấp.

Cụ thể là trong thư viện tiêu chuẩn của Java có khoảng 6 trình đọc Parser hỗ trợ chuyển đổi nội dung XML ở dạng chuỗi thuần sang dạng object và như vậy chúng ta sẽ có thể thực hiện các thao tác truy xuất tới các giá trị để đọc và chỉnh sửa, sau đó có thể chuyển trở lại về dạng chuỗi thuần để ghi vào tệp tĩnh. Trong khuôn khổ của Sub-Series này thì mình sẽ chỉ tìm hiểu và chia sẻ code ví dụ về trình đọc DOM Parser để sử dụng cho mini project đang xây dựng.

import java.io.*;
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; class Main { public static void main (String[] $args) { try { File $file = new File ("../data/book.xml"); Document $document = DocumentBuilderFactory .newInstance () .newDocumentBuilder () .parse ($file); // -- String $rootElmName = $document.getDocumentElement().getNodeName(); System.out.println ("Root element: " + $rootElmName); // -- NodeList $bookNodeList = $document.getElementsByTagName ("record"); App.printBookList ($bookNodeList); } catch (Exception e) { e.printStackTrace (); } } public static void printBookList (NodeList $bookNodeList) throws Exception { for ( int $i = 0; $i < $bookNodeList.getLength (); $i += 1 ) { Node $bookNode = $bookNodeList.item ($i); if ($bookNode.getNodeType() != Node.ELEMENT_NODE) throw new Exception ("Invalid data input"); // -- Element $bookElm = (Element) $bookNode; Main.printBook ($bookElm); } } public static void printBook (Element $bookElm) { String $id = $bookElm.getAttribute("id"); String $title = $bookElm.getElementsByTagName("title").item(0).getTextContent(); String $author = $bookElm.getElementsByTagName("author").item(0).getTextContent(); String $description = $bookElm.getElementsByTagName("description").item(0).getTextContent(); // -- System.out.println ("----------------------------"); System.out.println ("Id : " + $id); System.out.println ("Title : " + $title); System.out.println ("Author : " + $author); System.out.println ("Description : " + $description); } } // -- end class

Ở đây chúng ta có phần tử gốc Root Element chính là object đại diện cho tệp book.xml. Sau đó cấu trúc DOM bắt đầu với bảng <table> được đặt trong book, rồi tiếp đến mới tới các bản ghi <record>. Vì vậy nên để truy vấn nhanh các phần tử mô phỏng các bản ghi thì chúng ta vẫn sử dụng $document.getElementsByTagName().

Đây là điểm tuyệt vời của trình đọc DOM Parser bởi được xây dựng dựa trên tiêu chuẩn chung của w3c.org nên có giao diện lập trình tương đồng với DOM API trong môi trường trình duyệt web. Chúng ta sẽ có thể lướt qua tài liệu tham khảo rất nhanh và có thể bắt đầu sử dụng mà không cần duyệt chi tiết toàn bộ tài liệu trước khi bắt đầu sử dụng.

Root element : book
----------------------------
Id : 000000000
Title : Hrdaya Sutra Author : Buddhism Description : One of the most popular Mahayana Buddhist sutra. ----------------------------
Id : 000000001
Title : Yoga Sutra Author : Patanjali Description : One of the most popular Yoga book. 

Các liên kết tham khảo:

Ok.. như vậy là bây giờ chúng ta đã có thể tự thiết kế một Relational Database bằng các tệp tĩnh .xml và code một phần mềm quản lý cái RDB này giống như khi xây dựng trang blog đơn giản ở Series Tự Học Lập Trình Web đầu tiên nếu cần thiết. Công cụ tiếp theo cần tìm hiểu đó là một framework được Java cung cấp sẵn để vẽ giao diện đồ họa người dùng.

(chưa đăng tải) [Object-Oriented + Java] Bài viết #10 - Java Foundation Classes

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 67

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 47

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 41

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 75

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 280

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 50