Trình phân tích cú pháp Java SAX - Tổng quan
SAX (Simple API cho XML) là một trình phân tích cú pháp dựa trên sự kiện cho các tài liệu XML. Không giống như trình phân tích cú pháp DOM, trình phân tích cú pháp SAX không tạo ra cây phân tích cú pháp. SAX là một giao diện phát trực tuyến cho XML, có nghĩa là các ứng dụng sử dụng SAX nhận được thông báo sự kiện về việc tài liệu XML đang được xử lý một phần tử và thuộc tính, tại một thời điểm theo thứ tự tuần tự bắt đầu từ đầu tài liệu và kết thúc bằng việc đóng Yếu tố ROOT.
Đọ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 xử lý "sự kiện" phải được đăng ký với trình phân tích cú pháp.
Khi các mã được xác định, các phương thức gọi lại trong trình xử lý được gọi với thông tin liên quan.
Khi nào sử dụng?
Bạn nên sử dụng trình phân tích cú pháp SAX 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 khi nó được trình phân tích cú pháp nhìn thấy, vì vậy SAX hoạt động tốt đối với 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 đã nhìn thấy hoặc thay đổi thứ tự của các mục, bạn phải viết mã và lưu trữ dữ liệu của riêng mình.
Giao diện ContentHandler
Giao diện này chỉ định các phương thức gọi lại mà trình phân tích cú pháp SAX sử dụng để thông báo cho chương trình ứng dụng về các thành phần của tài liệu XML mà nó đã thấy.
void startDocument() - Được gọi ở đầu tài liệu.
void endDocument() - Được gọi ở cuối tài liệu.
void startElement(String uri, String localName, String qName, Attributes atts) - Được gọi ở đầu một phần tử.
void endElement(String uri, String localName,String qName) - Được gọi ở cuối một phần tử.
void characters(char[] ch, int start, int length) - Được gọi khi gặp dữ liệu ký tự.
void ignorableWhitespace( char[] ch, int start, int length) - Được gọi khi có DTD và gặp phải khoảng trắng có thể bỏ qua.
void processingInstruction(String target, String data) - Được gọi khi một lệnh xử lý được nhận dạng.
void setDocumentLocator(Locator locator)) - Cung cấp Bộ định vị có thể được sử dụng để xác định các vị trí trong tài liệu.
void skippedEntity(String name) - Được gọi khi gặp một thực thể chưa được giải quyết.
void startPrefixMapping(String prefix, String uri) - Được gọi khi ánh xạ không gian tên mới được xác định.
void endPrefixMapping(String prefix) - Được gọi khi một định nghĩa không gian tên kết thúc phạm vi của nó.
Giao diện thuộc tính
Giao diện này chỉ định các phương pháp để xử lý các thuộc tính được kết nối với một phần tử.
int getLength() - Trả về số lượng thuộc tính.
String getQName(int index)
String getValue(int index)
String getValue(String qname)