StAX Parser - Tổng quan
StAX là một API dựa trên JAVA để phân tích cú pháp tài liệu XML theo cách tương tự như trình phân tích cú pháp SAX. Nhưng có hai điểm khác biệt chính giữa hai API -
StAX là một API PULL trong khi SAX là một API PUSH. Nó có nghĩa là trong trường hợp phân tích cú pháp StAX, ứng dụng khách cần yêu cầu trình phân tích cú pháp StAX lấy thông tin từ XML bất cứ khi nào nó cần nhưng trong trường hợp phân tích cú pháp SAX, ứng dụng khách được yêu cầu lấy thông tin khi trình phân tích SAX thông báo cho ứng dụng khách thông tin đó có sẵn.
API StAX có thể đọc cũng như viết các tài liệu XML. Sử dụng SAX API, chỉ có thể đọc xml.
Sau đây là các tính năng của API StAX:
Đọc tài liệu XML từ trên xuống dưới, nhận ra các mã thông báo tạo nên một tài liệu XML được định dạng tốt.
Các mã thông báo được xử lý theo thứ tự như chúng xuất hiện trong tài liệu.
Báo cáo chương trình ứng dụng về bản chất của các mã thông báo mà trình phân tích cú pháp đã gặp phải khi chúng xảy ra.
Chương trình ứng dụng cung cấp một trình đọc "sự kiện" hoạt động như một trình lặp và lặp lại sự kiện để lấy thông tin cần thiết. Một trình đọc khác có sẵn là trình đọc "con trỏ" hoạt động như một con trỏ đến các nút xml.
Khi các sự kiện được xác định, các phần tử xml có thể được truy xuất từ đối tượng sự kiện và có thể được xử lý thêm.
Sử dụng khi nào?
Bạn nên sử dụng trình phân tích cú pháp StAX khi -
Bạn có thể xử lý tài liệu XML theo kiểu tuyến tính từ trên xuống dưới.
Tài liệu không được lồng sâu.
Bạn đang xử lý một tài liệu XML rất lớn, cây DOM sẽ chiếm quá nhiều bộ nhớ. Các triển khai DOM điển hình sử dụng mười byte bộ nhớ để biểu diễn một byte XML.
Vấn đề cần giải quyết chỉ liên quan đến một phần của tài liệu XML.
Dữ liệu có sẵn ngay sau khi nó được trình phân tích cú pháp nhìn thấy, vì vậy StAX hoạt động tốt cho một tài liệu XML đến qua một luồng.
Nhược điểm của SAX
Chúng tôi không có quyền truy cập ngẫu nhiên vào tài liệu XML vì nó được xử lý theo cách chỉ chuyển tiếp.
Nếu bạn cần theo dõi dữ liệu mà trình phân tích cú pháp đã xem hoặc thay đổi thứ tự của các mục, bạn phải tự viết mã và lưu trữ dữ liệu.
Lớp XMLEventReader
Lớp này cung cấp trình lặp các sự kiện có thể được sử dụng để lặp lại các sự kiện khi chúng xảy ra trong khi phân tích cú pháp tài liệu XML
StartElement asStartElement() - Dùng để lấy giá trị và thuộc tính của phần tử.
EndElement asEndElement() - Được gọi ở cuối một phần tử.
Characters asCharacters() - Có thể được sử dụng để lấy các ký tự như CDATA, khoảng trắng, v.v.
Lớp XMLEventWriter
Giao diện này chỉ định các phương pháp để tạo một sự kiện.
add(Event event) - Thêm sự kiện có chứa các phần tử vào XML.
Lớp XMLStreamReader
Lớp này cung cấp trình lặp các sự kiện có thể được sử dụng để lặp lại các sự kiện khi chúng xảy ra trong khi phân tích cú pháp tài liệu XML
int next() - Dùng để truy xuất sự kiện tiếp theo.
boolean hasNext() - Dùng để kiểm tra các sự kiện khác có tồn tại hay không
String getText() - Được sử dụng để lấy văn bản của một phần tử
String getLocalName() - Được sử dụng để lấy tên của một phần tử
Lớp XMLStreamWriter
Giao diện này chỉ định các phương pháp để tạo một sự kiện.
writeStartElement(String localName) - Thêm phần tử bắt đầu của một tên nhất định.
writeEndElement(String localName) - Thêm phần tử cuối của một tên nhất định.
writeAttribute(String localName, String value) - Ghi thuộc tính cho một phần tử.