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.