Java 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. Có nghĩa là trong trường hợp phân tích cú pháp StAX, một ứ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, một ứng dụng khách được yêu cầu để lấy thông tin khi trình phân tích cú pháp SAX thông báo cho ứng dụng khách rằng 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 tệp XML.
Thiết lập môi trường
Để sử dụng trình phân tích cú pháp StAX, bạn nên có stax.jar trong classpath của ứng dụng.
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ự mà chúng xuất hiện trong tài liệu.
Báo cáo chương trình ứng dụng bản chất của 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à "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.
Khi nào sử dụng?
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ó 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 một 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 đã nhìn thấy hoặc nơi trình phân tích cú pháp đã thay đổi thứ tự của các mục, thì bạn phải viết mã và lưu trữ dữ liệu của riêng bạn.
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 một tài liệu XML.
StartElement asStartElement() - Dùng để lấy giá trị và thuộc tính của một 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 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 một 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 tiếp theo có tồn tại hay không.
String getText() - Dùng để lấy văn bản của một phần tử.
String getLocalName() - 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 một phần tử bắt đầu của tên đã cho.
writeEndElement(String localName) - Thêm một phần tử cuối của tên đã cho.
writeAttribute(String localName, String value) - Ghi các thuộc tính cho một phần tử.