Cách chúng tôi tạo tệp xml thông qua mã php?

XML, hoặc Ngôn ngữ đánh dấu mở rộng, là một định dạng tài liệu rất phổ biến thường được sử dụng cho các giao thức trao đổi dữ liệu giữa máy với máy, để lưu trữ dữ liệu, trong các dịch vụ web và cho nhiều mục đích sử dụng khác

Nhiều ứng dụng web cần làm việc với các tệp XML. Một số ví dụ bao gồm các dịch vụ web, AJAX và phần cuối của ứng dụng từ xa cũng như các tập lệnh để lưu trữ dữ liệu hoặc truyền dữ liệu

 

PHP có một số công cụ khác nhau để xử lý các tệp XML. Trong bài đăng này, chúng ta sẽ xem cách tạo một tài liệu XML mới từ đầu bằng cách sử dụng ba phần mở rộng PHP khác nhau. SimpleXML, XMLWriter và DOM

Bạn nên sử dụng cái nào?

Hãy xem nào

Cách chúng tôi tạo tệp xml thông qua mã php?

bản quyền. Hình ảnh của StockUnlimited

 

 

VÍ DỤ XML

 

 

Một tài liệu XML đơn giản trông như thế này



   
      
      
         
      
   

 

 

Các tài liệu XML cũng có thể phức tạp hơn thế nhiều và bao gồm các yếu tố đánh dấu khác (như không gian tên hoặc nhận xét), nhưng trong hướng dẫn này, chúng ta sẽ chỉ tập trung vào cách sao chép ví dụ cơ bản này và cách xử lý t< . he two most basic XML elements: nútthuộc tính.  

Mặc dù về mặt lý thuyết, chúng ta chỉ có thể viết một tài liệu XML bằng cách sử dụng các hàm tiêu chuẩn (ví dụ: “lập lại” tất cả các dòng thành một biến), đây chỉ là một tùy chọn hợp lệ nếu tài liệu chúng ta cần tạo thực sự đơn giản và nếu chúng ta biết chính xác dữ liệu nào.

Trong thực tế, hầu hết thời gian chúng ta sẽ cần tạo các tài liệu XML đọc dữ liệu từ một nơi nào đó (như cơ sở dữ liệu) và tự động thêm hoặc chỉnh sửa các nút và thuộc tính. Làm điều đó với các hàm chuỗi tiêu chuẩn là gần như không thể

 

May mắn thay, PHP cung cấp cho chúng tôi một số công cụ tuyệt vời để xử lý các tài liệu XML. Đầu tiên chúng ta sẽ thấy phần mở rộng SimpleXML và lớp chính của nó có tên là SimpleXMLElement.

 

 

SimpleXML

 

 

Như tên gợi ý, đây có lẽ là tiện ích mở rộng đơn giản và dễ hiểu nhất mà bạn có thể sử dụng để tạo tài liệu XML

Đây là cách bạn có thể sử dụng lớp SimpleXMLEuity để sao chép ví dụ trước

 

/* SimpleXML */
$xml_header = '';
$xml = new SimpleXMLElement($xml_header);
$node1 = $xml->addChild('node');
$node1->addAttribute('id', '1');
$node1->addAttribute('name', 'node 1');
$subnode1 = $node1->addChild('subnode');
$subnode1->addAttribute('id', '1.1');
$subnode1->addAttribute('name', 'subnode 1.1');
$subnode2 = $node1->addchild('subnode');
$subnode2->addAttribute('id', '1.2');
$subnode2->addAttribute('name', 'subnode 1.2');
$inner_node1 = $subnode2->addChild('inner_node');
$inner_node1->addAttribute('id', '1.2.1');
$inner_node1->addAttribute('name', 'inner node 1.2.1');
echo $xml->asXML();

 

Nhờ cú pháp đơn giản và mã dễ đọc, tiện ích mở rộng SimpleXML là một lựa chọn tốt nếu bạn chỉ cần thực hiện một số chỉnh sửa XML cơ bản

Tuy nhiên, lớp này có một vài nhược điểm. Trước hết, hàm tạo của lớp cần một tài liệu XML hiện có để làm việc, vì vậy chúng ta cần tự tạo nó theo cách thủ công. Đó là lý do tại sao chúng ta cần định nghĩa biến $xml_header trước khi tạo đối tượng SimpleXMLEuity trong đoạn mã trên.

Ngoài ra, tiện ích mở rộng này có thể không phải là lựa chọn tốt nhất nếu cần chỉnh sửa phức tạp hơn vì nó thiếu một số chức năng. Ví dụ: lớp SimpleXMLEuity không có chức năng loại bỏ các nút hiện có (bạn cần sử dụng unset theo cách thủ công) và không thể xác thực tài liệu

Đảm bảo biết bạn sẽ cần thực hiện những thao tác nào trước khi quyết định sử dụng tiện ích mở rộng này cho dự án của mình và kiểm tra xem chúng có được hỗ trợ hay không

 

Bây giờ chúng ta hãy xem cái tiếp theo

 

 

XMLWriter

 

 

Lớp XMLWriter thực sự là một trình bao bọc cho thư viện libxml. Điều đầu tiên nổi bật về lớp này là nó chỉ có thể được sử dụng để viết tài liệu; .

Đây là mã để tạo tài liệu mẫu của chúng tôi với XMLWriter

 

$xml = new XMLWriter();
$xml->openURI('php://output');
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('Example');
$xml->startElement('node');
$xml->writeAttribute('id', '1');
$xml->writeAttribute('name', 'node 1');
$xml->startElement('subnode');
$xml->writeAttribute('id', '1.1');
$xml->writeAttribute('name', 'subnode 1.1');
$xml->endElement();
$xml->startElement('subnode');
$xml->writeAttribute('id', '1.2');
$xml->writeAttribute('name', 'subnode 1.2');
$xml->startElement('inner_node');
$xml->writeAttribute('id', '1.2.1');
$xml->writeAttribute('name', 'inner node 1.2.1');
$xml->endElement();
$xml->endElement();
$xml->endElement();
$xml->endElement();
$xml->flush();

 

Cú pháp của XMLWriter chắc chắn không phải là đẹp nhất và khá dài dòng. Mọi nút cần được mở bằng phương thức startElement và đóng bằng endElement. Khi có nhiều hơn một vài nút được lồng vào nhau, mã có thể dễ dàng trở nên khó đọc

Mặc dù không đẹp lắm, nhưng lớp này cho phép bạn tạo hầu hết mọi phần tử XML bên trong tài liệu của mình, vì vậy nó có thể là một lựa chọn tốt hơn SimpleXML để xử lý các cấu trúc XML phức tạp hơn

 

Hạn chế chính của XMLWriter là cách tiếp cận thủ tục nghiêm ngặt của nó, cụ thể là nó không cho phép bạn sửa đổi một phần tử XML sau khi nó đã được thêm vào cấu trúc của tài liệu. Điều này có nghĩa là, nếu bạn cần thêm một nút, bạn cần biết tất cả các thuộc tính của nó trước khi thêm nó, vì bạn không thể chỉnh sửa nó sau này

Điều này có thể hoặc không thể là một vấn đề đối với bạn, tùy thuộc vào ứng dụng của bạn. Ngoài ra, không có gì ngăn bạn sử dụng cả XMLWriter và SimpleXML trên cùng một tài liệu (hoặc bất kỳ phần mở rộng XML nào khác), tất nhiên là không đồng thời. Ví dụ: bạn có thể quyết định tạo tài liệu từ đầu bằng XMLWriter (tận dụng hiệu suất và các chức năng của nó) và chỉnh sửa tài liệu sau bằng SimpleXML để thay đổi thuộc tính hoặc thêm các nút mới

 

Bây giờ hãy xem phần mở rộng cuối cùng

 

 

MÔ HÌNH ĐỐI TƯỢNG TÀI LIỆU (DOM)

 

 

DOM là phần mở rộng PHP mạnh mẽ nhất để tạo và chỉnh sửa tài liệu XML. Bạn bắt đầu bằng cách tạo đối tượng loại DomDocument làm tài liệu chính, sau đó tạo và thao tác với nhiều nút dưới dạng đối tượng DomElement.

Do đó, mọi thành phần tài liệu (nghĩa là bản thân tài liệu và mọi nút) là một đối tượng riêng biệt và có thể được chỉnh sửa hoặc di chuyển bất kỳ lúc nào

 

Đây là mã để tạo tài liệu mẫu của chúng tôi với DOM

 

$xml = new DomDocument(‘1.0’, ‘UTF-8’);
$example_element = $xml->createElement(‘Example’);
$node1_element = $xml->createElement(‘node’);
$node1_element->setAttribute(‘id’, ‘1’);
$node1_element->setAttribute(‘name’, ‘node 1’);
$example_element->appendChild($node1_element);
$subnode1_element = $xml->createElement(‘subnode’);
$subnode1_element->setAttribute(‘id’, ‘1.1’);
$subnode1_element->setAttribute(‘name’, ‘subnode 1.1’);
$node1_element->appendChild($subnode1_element);
$subnode2_element = $xml->createElement(‘subnode’);
$subnode2_element->setAttribute(‘id’, ‘1.2’);
$subnode2_element->setAttribute(‘name’, ‘subnode 1.2’);
$node1_element->appendChild($subnode2_element);
$inner_node1_element = $xml->createElement(‘inner_node’);
$inner_node1_element->setAttribute(‘id’, ‘1.2.1’);
$inner_node1_element->setAttribute(‘name’, ‘inner node 1.2.1’);
$subnode2_element->appendChild($inner_node1_element);
$xml->appendChild($example_element);
$xml->formatOutput = TRUE;
echo $xml->saveXML();

 

Nếu bạn thích cấu trúc mã hướng đối tượng thì chắc chắn bạn sẽ thích cú pháp của DOM. DOM có thể là phần mở rộng phù hợp để sử dụng nếu bạn cần tạo các tài liệu XML phức tạp, đặc biệt nếu bạn cần tự động sửa đổi và mở rộng chúng

Vấn đề chính với DOM là hiệu suất tương đối kém đối với các tài liệu lớn

 

Bây giờ hãy xem tất cả các tiện ích mở rộng này hoạt động như thế nào

 

 

 

SO SÁNH HIỆU SUẤT

Cách chúng tôi tạo tệp xml thông qua mã php?

bản quyền. Hình ảnh của StockUnlimited

 

 

Để xử lý các tài liệu XML nhỏ, cả ba tiện ích mở rộng này đều hoàn toàn phù hợp để sử dụng. Tuy nhiên, trong một số ứng dụng, có thể cần phải xử lý các tài liệu rất lớn, trong trường hợp đó, hiệu suất của tiện ích mở rộng có vấn đề

Tôi đã chạy tập lệnh thử nghiệm để tạo tài liệu XML nhiều lần trong một vòng lặp và cuối cùng sẽ kiểm tra thời gian thực thi (máy thử nghiệm của tôi được định cấu hình bằng PHP 7. 0). Tôi đã chạy thử nghiệm một vài lần để chắc chắn rằng kết quả đáng tin cậy

 Nếu bạn muốn tự chạy kiểm tra, chỉ cần nhấp vào nút dưới đây để tải xuống tệp PHP.  

 

Tải về tập tin thử nghiệm

 

 

(Tôi cũng đã thử kiểm tra mức sử dụng bộ nhớ, nhưng rất tiếc là tôi không thu được kết quả nhất quán nào. )

Đây là kết quả tốc độ. Các con số biểu thị thời gian thực hiện tính bằng giây, vì vậy càng ít càng tốt

 

KẾT QUẢ KIỂM TRA TỐC ĐỘ

DOM

SimpleXML

XMLWriter

Như bạn có thể thấy rõ ràng, DOM là thư viện chậm nhất trong khi XMLWriter là thư viện nhanh nhất. Đối với các tài liệu nhỏ, sự khác biệt về tốc độ có thể không đáng kể, nhưng nếu ứng dụng của bạn sẽ xử lý các tài liệu lớn thì sự khác biệt này có thể trở nên rất lớn.

XMLWriter chạy thử nghiệm trong khoảng một nửa thời gian so với DOM, trong khi DOM và SimpleXML cho kết quả tương tự. Đối với các ứng dụng quan trọng (như dịch vụ web hoặc thủ tục lưu trữ), bạn nên thử sử dụng XMLWriter, trong khi DOM chỉ nên được sử dụng để tạo các tài liệu nhỏ với tốc độ chậm

Có thể sử dụng SimpleXML thay vì DOM trong trường hợp bạn không cần tất cả các chức năng nâng cao của DOM

 

Trong biểu đồ bên dưới, bạn có thể thấy rõ hơn tốc độ đạt được. Các thanh cho biết thời gian thực hiện của các bài kiểm tra so với của DOM (được sử dụng làm tham chiếu ở mức 100%)

  • DOM 100% 100%
  • XML đơn giản 87. 6% 87. 6%
  • XMLWriter 54. 3% 54. 3%

 

 

KẾT LUẬN

 

Dưới đây là những ưu và nhược điểm của từng tiện ích mở rộng

 

SimpleXML

  • Dễ dàng và đơn giản để sử dụng
  • Khả năng đọc mã tốt
  • chức năng hạn chế
  • Hiệu suất kém đối với các tài liệu lớn

 

XMLWriter

  • dễ học
  • Hiệu suất tốt nhất
  • Không thể đọc hoặc chỉnh sửa tài liệu hiện có
  • Khả năng đọc mã kém

DOM

  • Tập hợp đầy đủ các chức năng
  • Khả năng đọc mã rất tốt
  • Khó học và đôi khi quá phức tạp
  • Hiệu suất rất kém đối với các tài liệu lớn

 

Nhận tin nhắn về nhà. sử dụng XMLWriter cho các tài liệu lớn, dịch vụ tốc độ nhanh và các ứng dụng quan trọng. Trong các trường hợp khác, hãy sử dụng SimpleXML nếu các chức năng của nó đủ cho nhu cầu của bạn, nếu không thì hãy chuyển sang DOM

Tôi có thể viết mã PHP trong tệp XML không?

Nếu bạn chạy tệp XML dưới dạng tập lệnh PHP thì có . Đầu ra của tập lệnh sẽ là XML hợp lệ, nhưng tệp chứa PHP nội tuyến rất có thể sẽ không phải là XML hợp lệ. Lưu câu trả lời này.

Làm cách nào để tạo tệp XML bằng PHP MySQL?

Kết nối với cơ sở dữ liệu bằng mysqli. Trước tiên, bạn cần kết nối với cơ sở dữ liệu bằng phương thức mysqli. .
Chọn bản ghi từ bảng sách. Bên cạnh để chọn bản ghi từ bảng sách. .
Tạo tệp XML bằng hàm createXMLfile(). Cuối cùng, để tạo tệp XML bằng cách sử dụng lớp php DOMDocument, một hàm createXMLfile được tạo

Làm cách nào để tạo tệp XML động trong PHP?

$xml = DOMDocument mới("1. 0"); Bây giờ, chúng ta sẽ tạo các phần tử của tài liệu XML. Nó sẽ tạo nút phần tử mới bằng cách sử dụng hàm createElement(). Nó tạo ra một thể hiện mới của lớp DOMElement

Tệp XML trong PHP là gì?

XML là định dạng dữ liệu để trao đổi tài liệu có cấu trúc được tiêu chuẩn hóa . Thông tin thêm về XML có thể được tìm thấy trong Hướng dẫn XML của chúng tôi. Tiện ích mở rộng này sử dụng trình phân tích cú pháp XML của người nước ngoài. Expat là một trình phân tích cú pháp dựa trên sự kiện, nó xem một tài liệu XML dưới dạng một chuỗi các sự kiện.