Bộ phân tích XML Expat trong PHP
Bộ phân tích Expat được tích hợp sẵn cho phép xử lý tài liệu XML trong PHP.
XML là gì?
XML được sử dụng để mô tả dữ liệu, tập trung vào dữ liệu là gì. Tệp XML mô tả cấu trúc dữ liệu.
Trong XML, không có thẻ được định nghĩa sẵn. Bạn phải định nghĩa thẻ của riêng mình.
Nếu bạn muốn học thêm về XML, hãy truy cập Giáo trình XML.
Expat là gì?
Để đọc và cập nhật - tạo và xử lý tài liệu XML, bạn cần bộ phân tích XML.
Có hai loại cơ bản của bộ phân tích XML:
- Bộ phân tích cây: Loại phân tích này chuyển đổi tài liệu XML thành cấu trúc cây. Nó phân tích toàn bộ tài liệu và cung cấp API để truy cập các phần tử trong cây, chẳng hạn như Document Object Model (DOM).
- Bộ phân tích sự kiện: Đối xử tài liệu XML như một loạt các sự kiện. Khi một sự kiện cụ thể xảy ra, bộ phân tích sẽ gọi hàm để xử lý.
Bộ phân tích sự kiện
Bộ phân tích sự kiện tập trung vào nội dung tài liệu XML,而不是 kết quả của chúng. Do đó, bộ phân tích sự kiện có thể truy cập dữ liệu nhanh hơn so với bộ phân tích dựa trên cây.
Xin xem đoạn XML dưới đây:
<from>John</from>
Bộ phân tích sự kiện coi XML trên là một chuỗi ba sự kiện:
- Bắt đầu phần tử: from
- Bắt đầu phần CDATA, giá trị: John
- Đóng phần tử: from
Ví dụ XML trên chứa XML có hình thức tốt. Tuy nhiên, ví dụ này là XML không hợp lệ vì không có tuyên bố loại tài liệu (DTD) liên quan hoặc DTD được nhúng.
Tuy nhiên, khi sử dụng bộ phân tích Expat, điều này không có sự khác biệt. Expat là bộ phân tích không kiểm tra tính hợp lệ, bỏ qua bất kỳ DTD nào.
Là một bộ phân tích XML dựa trên sự kiện, không kiểm tra tính hợp lệ, Expat nhanh và nhẹ, rất phù hợp với các ứng dụng web PHP.
Ghi chú:Tài liệu XML phải có hình thức tốt, nếu không Expat sẽ tạo ra lỗi.
Cài đặt
Bộ phân tích XML Expat là một phần của lõi PHP. Bạn không cần cài đặt mà vẫn có thể sử dụng các hàm này.
Tệp XML
Chúng ta sẽ sử dụng tệp XML dưới đây trong ví dụ của mình:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading> nhắc nhở</heading> <body>Đừng quên cuộc họp!</body> </note>
Khởi tạo bộ phân tích XML
Chúng ta cần khởi tạo bộ phân tích XML trong PHP, định nghĩa bộ xử lý sự kiện XML khác nhau, sau đó phân tích tệp XML này.
ví dụ
<?php //Khởi tạo bộ phân tích XML $parser=xml_parser_create(); //Hàm sử dụng ở đầu phần tử function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Lưu ý --<br />"; break; case "TO": echo "Đến: "; break; case "FROM": echo "Từ: "; break; case "HEADING": echo "Tiêu đề: "; break; case "BODY": echo "Thông báo: "; } } //Hàm sử dụng ở cuối phần tử function stop($parser,$element_name) { echo "<br />"; } //Hàm sử dụng khi tìm dữ liệu ký tự function char($parser,$data) { echo $data; } //Chỉ định bộ xử lý phần tử xml_set_element_handler($parser,"start","stop"); //Chỉ định bộ xử lý dữ liệu xml_set_character_data_handler($parser,"char"); //Mở tệp XML $fp=fopen("test.xml","r"); //Đọc dữ liệu while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("Lỗi XML: %s tại dòng %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //Giải phóng bộ phân tích XML xml_parser_free($parser); ?>
Kết quả đầu ra của mã trên:
-- Ghi chú -- Đến: George Từ: John Tiêu đề: Lưu ý Thông báo: Đừng quên cuộc họp!
Giải thích về cách hoạt động:
- Khởi tạo bộ phân tích XML bằng hàm xml_parser_create()
- Tạo hàm phù hợp với các chương trình xử lý sự kiện khác nhau
- Thêm hàm xml_set_element_handler() để định nghĩa, khi bộ phân tích gặp thẻ bắt đầu và kết thúc, sẽ thực hiện hàm nào
- Thêm hàm xml_set_character_data_handler() để định nghĩa, khi bộ phân tích gặp dữ liệu ký tự, sẽ thực hiện hàm nào
- Sử dụng hàm xml_parse() để phân tích tệp "test.xml"
- Nếu có lỗi, thêm hàm xml_error_string() để chuyển lỗi XML thành mô tả văn bản
- Gọi hàm xml_parser_free() để giải phóng bộ nhớ được phân phối cho hàm xml_parser_create()
Thông tin thêm về bộ phân tích PHP Expat
Nếu cần thêm thông tin về hàm PHP Expat, vui lòng truy cập Hướng dẫn PHP XML Parser của chúng tôi.