Hướng dẫn PHP XML: Tạo, phân tích cú pháp, đọc bằng ví dụ
⚡ Tóm tắt thông minh
PHP và XML phối hợp với nhau để cấu trúc, lưu trữ và trao đổi dữ liệu giữa các hệ thống. Hướng dẫn này sẽ giải thích về XML, DOM và các trình phân tích cú pháp XML, sau đó trình bày cách đọc một tài liệu XML bằng SimpleXML và cách tạo một tài liệu XML bằng lớp DOMDocument, kết thúc bằng việc chỉ ra khi nào nên sử dụng từng loại.

XML là gì?
XML là từ viết tắt của Ngôn ngữ đánh dấu mở rộng.
XML được sử dụng để cấu trúc, lưu trữ và truyền tải dữ liệu từ hệ thống này sang hệ thống khác.
XML tương tự như HTML. Nó sử dụng thẻ mở và thẻ đóng. Tuy nhiên, khác với HTML, XML cho phép người dùng định nghĩa các thẻ riêng của mình.
DOM là gì?
DOM là từ viết tắt của Mô hình đối tượng tài liệu.
Đây là một tiêu chuẩn đa nền tảng và không phụ thuộc ngôn ngữ, định nghĩa cách truy cập và thao tác dữ liệu trong:
- HTML
- XHTML
- XML
DOM XML được sử dụng để truy cập và thao tác các tài liệu XML. Nó xem tài liệu XML như một cấu trúc cây.
Trình phân tích cú pháp XML
Trình phân tích cú pháp XML là một chương trình dịch tài liệu XML thành một đối tượng Mô hình Đối tượng Tài liệu XML (DOM).
Sau đó, đối tượng XML DOM có thể được thao tác bằng cách sử dụng JavaKịch bản, Python, PHP và các ngôn ngữ khác.
Từ khóa CDATA, viết tắt của (unparsed) Character Data (Dữ liệu ký tự chưa được phân tích), được sử dụng để bỏ qua các ký tự đặc biệt như “<” và “>” khi phân tích tài liệu XML.
Tại sao nên sử dụng XML?
- Các dịch vụ web như SOAP và REST sử dụng định dạng XML để trao đổi thông tin. Việc hiểu XML là gì và cách thức hoạt động của nó sẽ mang lại cho bạn lợi thế cạnh tranh với tư cách là một nhà phát triển, vì các ứng dụng hiện đại sử dụng rất nhiều dịch vụ web.
- Tài liệu XML có thể được sử dụng để lưu trữ các thiết lập cấu hình của một ứng dụng.
- Nó cho phép bạn tạo các thẻ tùy chỉnh của riêng mình, điều này làm cho nó linh hoạt hơn.
Ví dụ về Tài liệu XML
Giả sử bạn đang phát triển...ping Một ứng dụng lấy dữ liệu từ dịch vụ web ở định dạng XML.
Dưới đây là một ví dụ về cấu trúc của tài liệu XML.
<?xml version="1.0" encoding="utf-8"?> <employees status = "ok"> <record man_no = "101"> <name>Joe Paul</name> <position>CEO</position> </record> <record man_no = "102"> <name>Tasha Smith</name> <position>Finance Manager</position> </record> </employees>
ĐÂY,
- “ "Chỉ định phiên bản XML và mã hóa sẽ được sử dụng"
- “ ” là phần tử gốc.
- “ … “ là các phần tử con, mỗi phần tử tương ứng với một hồ sơ nhân viên.”
Cách đọc XML bằng PHP
Bây giờ chúng ta hãy viết mã để đọc tài liệu XML về nhân viên và hiển thị kết quả trên trình duyệt web. index.php
<?php $xml = simplexml_load_file('employees.xml'); echo '<h2>Employees Listing</h2>'; $list = $xml->record; for ($i = 0; $i < count($list); $i++) { echo '<b>Man no:</b> ' . $list[$i]->attributes()->man_no . '<br>'; echo 'Name: ' . $list[$i]->name . '<br>'; echo 'Position: ' . $list[$i]->position . '<br><br>'; } ?>
ĐÂY,
- Câu lệnh “$xml = simplexml_load_file('employees.xml');” sử dụng hàm simplexml_load_file để tải tệp có tên employees.xml và gán nội dung của tệp đó cho biến $xml.
- “$list = $xml->record;” lấy nội dung của các nút bản ghi.
- “for ($i = 0; $i < count(…)…” là vòng lặp for đọc mảng và xuất ra kết quả.
- “$list[$i]->attributes()->man_no;” đọc thuộc tính man_no của phần tử
- “$list[$i]->name;” đọc giá trị của phần tử con tên
- “$list[$i]->position;” đọc giá trị của phần tử con vị trí
Kiểm tra trình đọc XML
Giả sử bạn đã lưu tệp index.php trong thư mục phptuts/xml, hãy truy cập vào đường dẫn sau: URL http://localhost/phptuts/xml/index.php
Cách tạo tài liệu XML bằng PHP
Bây giờ chúng ta sẽ xem cách tạo một tài liệu XML bằng PHP.
Đoạn mã sau sử dụng lớp DOMDocument tích hợp sẵn của PHP để tạo tài liệu XML.
<?php $dom = new DOMDocument(); $dom->encoding = 'utf-8'; $dom->xmlVersion = '1.0'; $dom->formatOutput = true; $xml_file_name = 'movies_list.xml'; $root = $dom->createElement('Movies'); $movie_node = $dom->createElement('movie'); $attr_movie_id = new DOMAttr('movie_id', '5467'); $movie_node->setAttributeNode($attr_movie_id); $child_node_title = $dom->createElement('Title', 'The Campaign'); $movie_node->appendChild($child_node_title); $child_node_year = $dom->createElement('Year', 2012); $movie_node->appendChild($child_node_year); $child_node_genre = $dom->createElement('Genre', 'Comedy'); $movie_node->appendChild($child_node_genre); $child_node_ratings = $dom->createElement('Ratings', 6.2); $movie_node->appendChild($child_node_ratings); $root->appendChild($movie_node); $dom->appendChild($root); $dom->save($xml_file_name); echo "$xml_file_name has been successfully created"; ?>
ĐÂY,
- “$dom = new DOMDocument();” tạo ra một thể hiện của lớp DOMDocument.
- “$dom->encoding = 'utf-8';” đặt mã hóa tài liệu thành utf-8
- “$dom->xmlVersion = '1.0';” chỉ định số phiên bản 1.0
- “$dom->formatOutput = true;” đảm bảo rằng đầu ra được định dạng tốt
- “$root = $dom->createElement('Phim');” tạo nút gốc có tên Phim
- “$attr_movie_id = new DOMAttr('movie_id', '5467');” định nghĩa thuộc tính movie_id của nút phim.
- “$dom->createElement('ElementName', 'ElementValue')” tạo một nút con. ElementName chỉ định tên của phần tử, ví dụ: Title. ElementValue đặt giá trị cho nút con, ví dụ: The Campaign.
- “$root->appendChild($movie_node);” thêm nút phim vào nút gốc Movies
- “$dom->appendChild($root);” nối thêm nút gốc vào tài liệu XML.
- “$dom->save($xml_file_name);” lưu tệp XML vào thư mục gốc của máy chủ web.
- “echo “$xml_file_name đã được tạo thành công”;” hiển thị thông báo thành công.
Kiểm tra XML Creator
Giả sử bạn đã lưu tệp create_movies_list.php trong thư mục phptuts/xml, hãy truy cập vào đường dẫn sau: URL http://localhost/phptuts/xml/create_movies_list.php
Mở tệp movies_list.xml.
SimpleXML so với DOMDocument
PHP cung cấp hai cách chính để làm việc với XML. SimpleXML là lựa chọn tốt nhất khi bạn chủ yếu cần đọc dữ liệu, trong khi DOMDocument cung cấp khả năng kiểm soát chi tiết hơn để xây dựng và chỉnh sửa tài liệu chuyên sâu. Bảng dưới đây so sánh chúng.
| Yếu tố | SimpleXML | DOMTài liệu |
|---|---|---|
| Dễ sử dụng | Rất đơn giản; tài liệu hoạt động như các đối tượng lồng nhau. | API dựa trên nút, chi tiết hơn |
| Tốt nhất cho | Đọc và chỉnh sửa sơ lược | Tạo tài liệu và thao tác phức tạp |
| Phong cách truy cập | $xml->record->name | createElement() và appendChild() |
| Hỗ trợ XPath | Vâng, thông qua ->xpath() | Vâng, thông qua lớp DOMXPath. |
Một nguyên tắc thực tế là nên sử dụng SimpleXML trước tiên để đọc các nguồn cấp dữ liệu và các tệp đơn giản, và chuyển sang DOMDocument khi bạn cần tạo tài liệu, chèn các nút vào các vị trí cụ thể hoặc xác thực dựa trên lược đồ.



