xml.sax --- Hỗ trợ trình phân tích cú pháp SAX2

Source code: Lib/xml/sax/__init__.py


Gói xml.sax cung cấp một số mô-đun triển khai giao diện API đơn giản cho XML (SAX) cho Python. Bản thân gói này cung cấp các ngoại lệ SAX và các chức năng tiện lợi sẽ được người dùng SAX API sử dụng nhiều nhất.

Ghi chú

Nếu bạn cần phân tích dữ liệu không đáng tin cậy hoặc chưa được xác thực, hãy xem bảo mật XML.

Thay đổi trong phiên bản 3.7.1: Trình phân tích cú pháp SAX không còn xử lý các thực thể bên ngoài chung theo mặc định để tăng tính bảo mật. Trước đây, trình phân tích cú pháp đã tạo các kết nối mạng để tìm nạp các tệp từ xa hoặc tải các tệp cục bộ từ hệ thống tệp cho DTD và các thực thể. Tính năng này có thể được bật lại bằng phương thức setFeature() trên đối tượng trình phân tích cú pháp và đối số feature_external_ges.

Các chức năng tiện lợi là:

xml.sax.make_parser(parser_list=[])

Tạo và trả về một đối tượng SAX XMLReader. Trình phân tích cú pháp đầu tiên được tìm thấy sẽ được sử dụng. Nếu parser_list được cung cấp, nó phải là một chuỗi có thể lặp lại, đặt tên cho các mô-đun có hàm có tên là create_parser(). Các mô-đun được liệt kê trong parser_list sẽ được sử dụng trước các mô-đun trong danh sách trình phân tích cú pháp mặc định.

Thay đổi trong phiên bản 3.8: Đối số parser_list có thể lặp lại bất kỳ, không chỉ là danh sách.

xml.sax.parse(filename_or_stream, handler, error_handler=handler.ErrorHandler())

Tạo trình phân tích cú pháp SAX và sử dụng nó để phân tích tài liệu. Tài liệu được chuyển vào dưới dạng filename_or_stream, có thể là tên tệp hoặc đối tượng tệp. Tham số handler cần phải là một phiên bản SAX ContentHandler. Nếu error_handler được cung cấp, nó phải là một phiên bản SAX ErrorHandler; nếu bị bỏ qua, SAXParseException sẽ xuất hiện ở tất cả các lỗi. Không có giá trị trả về; tất cả công việc phải được thực hiện bởi handler được chuyển vào.

xml.sax.parseString(string, handler, error_handler=handler.ErrorHandler())

Tương tự như parse(), nhưng phân tích cú pháp từ bộ đệm string được nhận dưới dạng tham số. string phải là phiên bản str hoặc bytes-like object.

Thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ cho các phiên bản str.

Một ứng dụng SAX điển hình sử dụng ba loại đối tượng: trình đọc, trình xử lý và nguồn đầu vào. "Trình đọc" trong ngữ cảnh này là một thuật ngữ khác cho trình phân tích cú pháp, tức là một đoạn mã nào đó đọc byte hoặc ký tự từ nguồn đầu vào và tạo ra một chuỗi sự kiện. Sau đó, các sự kiện sẽ được phân phối đến các đối tượng xử lý, tức là người đọc gọi một phương thức trên trình xử lý. Do đó, ứng dụng SAX phải có được đối tượng reader, tạo hoặc mở nguồn đầu vào, tạo trình xử lý và kết nối tất cả các đối tượng này với nhau. Là bước chuẩn bị cuối cùng, người đọc được gọi để phân tích đầu vào. Trong quá trình phân tích cú pháp, các phương thức trên đối tượng xử lý được gọi dựa trên các sự kiện cấu trúc và cú pháp từ dữ liệu đầu vào.

Đối với những đối tượng này, chỉ có giao diện là phù hợp; chúng thường không được khởi tạo bởi chính ứng dụng. Vì Python không có khái niệm rõ ràng về giao diện nên chúng được giới thiệu chính thức dưới dạng các lớp, nhưng các ứng dụng có thể sử dụng các triển khai không kế thừa từ các lớp được cung cấp. Các giao diện InputSource, Locator, Attributes, AttributesNSXMLReader được xác định trong mô-đun xml.sax.xmlreader. Các giao diện xử lý được xác định trong xml.sax.handler. Để thuận tiện, InputSource (thường được khởi tạo trực tiếp) và các lớp xử lý cũng có sẵn từ xml.sax. Các giao diện này được mô tả dưới đây.

Ngoài các lớp này, xml.sax còn cung cấp các lớp ngoại lệ sau.

exception xml.sax.SAXException(msg, exception=None)

Đóng gói một lỗi hoặc cảnh báo XML. Lớp này có thể chứa thông tin cảnh báo hoặc lỗi cơ bản từ trình phân tích cú pháp XML hoặc ứng dụng: nó có thể được phân lớp để cung cấp chức năng bổ sung hoặc thêm bản địa hóa. Lưu ý rằng mặc dù các trình xử lý được xác định trong giao diện ErrorHandler nhận các trường hợp ngoại lệ này, nhưng thực tế không cần thiết phải đưa ra ngoại lệ --- nó cũng hữu ích như một nơi chứa thông tin.

Khi được khởi tạo, msg phải là mô tả lỗi mà con người có thể đọc được. Tham số exception tùy chọn, nếu được cung cấp, phải là None hoặc một ngoại lệ đã được mã phân tích cú pháp phát hiện và đang được chuyển dưới dạng thông tin.

Đây là lớp cơ sở cho các lớp ngoại lệ SAX khác.

exception xml.sax.SAXParseException(msg, exception, locator)

Lớp con của SAXException được nêu lên do lỗi phân tích cú pháp. Các phiên bản của lớp này được chuyển tới các phương thức của giao diện SAX ErrorHandler để cung cấp thông tin về lỗi phân tích cú pháp. Lớp này hỗ trợ giao diện SAX Locator cũng như giao diện SAXException.

exception xml.sax.SAXNotRecognizedException(msg, exception=None)

Lớp con của SAXException được nêu ra khi SAX XMLReader gặp phải một tính năng hoặc thuộc tính không được nhận dạng. Các ứng dụng và tiện ích mở rộng SAX có thể sử dụng lớp này cho các mục đích tương tự.

exception xml.sax.SAXNotSupportedException(msg, exception=None)

Lớp con của SAXException được nêu ra khi SAX XMLReader được yêu cầu bật một tính năng không được hỗ trợ hoặc đặt thuộc tính thành giá trị mà quá trình triển khai không hỗ trợ. Các ứng dụng và tiện ích mở rộng SAX có thể sử dụng lớp này cho các mục đích tương tự.

Xem thêm

SAX: The Simple API for XML

Trang web này là đầu mối cho định nghĩa của SAX API. Nó cung cấp triển khai Java và tài liệu trực tuyến. Các liên kết đến việc triển khai và thông tin lịch sử cũng có sẵn.

Mô-đun xml.sax.handler

Định nghĩa về giao diện cho các đối tượng do ứng dụng cung cấp.

Mô-đun xml.sax.saxutils

Các chức năng tiện lợi để sử dụng trong các ứng dụng SAX.

Mô-đun xml.sax.xmlreader

Định nghĩa về giao diện cho các đối tượng do trình phân tích cú pháp cung cấp.

Đối tượng ngoại lệ SAX

Lớp ngoại lệ SAXException hỗ trợ các phương thức sau:

SAXException.getMessage()

Trả về thông báo mà con người có thể đọc được mô tả tình trạng lỗi.

SAXException.getException()

Trả về một đối tượng ngoại lệ được đóng gói hoặc None.