PHP - Simple XML Parser

Mở rộng SimpleXML của PHP cung cấp một bộ công cụ rất đơn giản và dễ sử dụng để chuyển đổi XML thành một đối tượng có thể được xử lý bằng các bộ chọn thuộc tính bình thường và các bộ lặp mảng. Nó là một trình phân tích dựa trên cây, và hoạt động tốt với các tệp XML đơn giản, nhưng có thể gặp vấn đề khi làm việc với các tài liệu XML lớn và phức tạp.

Các hàm sau đây được định nghĩa trong phần mở rộng SimpleXML −

simplexml_load_file

Hàm simplexml_load_file() diễn giải một tệp XML thành một đối tượng −

simplexml_load_file(
   string $filename,
   ?string $class_name = SimpleXMLElement::class,
   int $options = 0,
   string $namespace_or_prefix = "",
   bool $is_prefix = false
): SimpleXMLElement|false

Một tài liệu XML được định dạng đúng trong tệp đã cho được chuyển đổi thành một đối tượng.

Tham số filename là một chuỗi đại diện cho tệp XML sẽ được phân tích. class_name là tham số tùy chọn. Nó chỉ định lớp mà đối tượng của nó sẽ được trả về bởi hàm. Hàm trả về một đối tượng của lớp SimpleXMLElement với các thuộc tính chứa dữ liệu được lưu trong tài liệu XML, hoặc false trong trường hợp thất bại.

Example

Hãy xem xét ví dụ sau −

<?php
   $xml = simplexml_load_file("test.xml") or die("Error: Cannot create object");
   print_r($xml);
?>

Nó sẽ tạo ra output

SimpleXMLElement Object
(
   [Course] => Android
   [Subject] => Android
   [Company] => TutorialsPoint
   [Price] => $10
)

simplexml_load_string

Hàm simplexml_load_string() diễn giải một tệp XML thành một đối tượng.

simplexml_load_string(
   string $filename,
   ?string $class_name = SimpleXMLElement::class,
   int $options = 0,
   string $namespace_or_prefix = "",
   bool $is_prefix = false
): SimpleXMLElement|false

Một tài liệu XML được cấu trúc đúng trong chuỗi đã cho được chuyển đổi thành một đối tượng.

Tham số $data là một chuỗi đại diện cho tài liệu XML cần được phân tích. class_name là tham số tùy chọn. Nó chỉ định lớp mà đối tượng của nó sẽ được trả về bởi hàm. Hàm trả về một đối tượng của lớp SimpleXMLElement với các thuộc tính chứa dữ liệu có trong tài liệu XML, hoặc false nếu thất bại.

Example

Hãy xem xét ví dụ sau −

<?php
   $data = "<?xml version = '1.0' encoding = 'UTF-8'?>   
   <note>
      <Course>Android</Course>
      <Subject>Android</Subject>
      <Company>TutorialsPoint</Company>
      <Price>$10</Price>
   </note>";
   $xml = simplexml_load_string($data) or die("Error: Cannot create object");
   print_r($xml);
?>

Nó sẽ tạo ra output

SimpleXMLElement Object
(
   [Course] => Android
   [Subject] => Android
   [Company] => TutorialsPoint
   [Price] => $10
)

simplexml_import_dom

Hàm simplexml_import_dom() tạo ra một đối tượng SimpleXMLElement từ một nút DOM.

simplexml_import_dom(SimpleXMLElement|DOMNode $node, ?string 
   $class_name = SimpleXMLElement::class): ?SimpleXMLElement

Hàm này nhận một nút của tài liệu DOM và chuyển nó thành một nút SimpleXML. Đối tượng mới này sau đó có thể được sử dụng như một phần tử SimpleXML gốc.

Tham số node là một nút DOM Element. Tham số class_name tùy chọn có thể được cung cấp để simplexml_import_dom() trả về một đối tượng của lớp con được chỉ định của lớp SimpleXMLElement. Giá trị trả về bởi hàm này là một SimpleXMLElement hoặc null nếu không thành công.

Example

Hãy xem xét ví dụ sau −

<?php
   $dom = new DOMDocument;
   $dom->loadXML('<books><book><title>PHP Handbook</title></book></books>');
   if (!$dom) {
      echo 'Error while parsing the document';
      exit;
   }

   $s = simplexml_import_dom($dom);
   echo $s->book[0]->title;
?>

Nó sẽ tạo ra output

PHP Handbook

Get the Node Values

Đoạn mã sau đây cho thấy cách lấy giá trị nút từ tệp XML và tệp XML nên như sau −

<?xml version = "1.0" encoding = "utf-8"?>
<tutorialspoint>
   <course category = "JAVA">
      <title lang = "en">Java</title>
      <tutor>Gopal</tutor>
      <duration></duration>
      <price>$30</price>
   </course>

   <course category = "HADOOP">
      <title lang = "en">Hadoop</title>.
      <tutor>Satish</tutor>
      <duration>3</duration>
      <price>$50</price>
   </course>

   <course category = "HTML">
      <title lang = "en">html</title>
      <tutor>raju</tutor>
      <duration>5</duration>
      <price>$50</price>
   </course>

   <course category = "WEB">
      <title lang = "en">Web Technologies</title>
      <tutor>Javed</tutor>
      <duration>10</duration>
      <price>$60</price>
   </course>
</tutorialspoint>

Example

Mã PHP nên như sau −

<?php
   $xml = simplexml_load_file("books.xml") or die("Error: Cannot create object");

   foreach($xml->children() as $books) { 
      echo $books->title . "<br> "; 
      echo $books->tutor . "<br> "; 
      echo $books->duration . "<br> ";
      echo $books->price . "<hr>"; 
   }
?>

Nó sẽ tạo ra output

Java
Gopal

$30
________________________________________
Hadoop
Satish
3
$50
________________________________________
html
raju
5
$50
________________________________________
Web Technologies
Javed
10
$60
________________________________________