PHP - 簡單XML解析器



PHP 的 SimpleXML 擴充套件提供了一個非常簡單易用的工具集,用於將 XML 轉換為可以使用普通屬性選擇器和陣列迭代器處理的物件。它是一個基於樹的解析器,適用於簡單的 XML 檔案,但在處理較大和複雜的 XML 文件時可能會遇到問題。

SimpleXML 擴充套件中定義了以下函式:

simplexml_load_file

simplexml_load_file() 函式將 XML 檔案解釋為一個物件:

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

給定檔案中的格式良好的 XML 文件將轉換為一個物件。

filename 引數是一個字串,表示要解析的 XML 檔案。class_name 是可選引數。它指定函式將返回的物件的類。該函式返回一個 SimpleXMLElement 類的物件,其屬性包含 XML 文件中儲存的資料,或者在失敗時返回 false

示例

檢視以下示例:

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

它將產生以下輸出

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

simplexml_load_string

simplexml_load_string() 函式將 XML 檔案解釋為一個物件。

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

給定字串中的格式良好的 XML 文件將轉換為一個物件。

$data 引數是一個字串,表示要解析的 XML 文件。class_name 是可選引數。它指定函式將返回的物件的類。該函式返回一個 SimpleXMLElement 類的物件,其屬性包含 XML 文件中儲存的資料,或者在失敗時返回 false

示例

檢視以下示例:

<?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);
?>

它將產生以下輸出

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

simplexml_import_dom

simplexml_import_dom() 函式從 DOM 節點構造一個 SimpleXMLElement 物件。

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

此函式採用 DOM 文件的節點並將其轉換為 SimpleXML 節點。然後,這個新物件可以用作本機 SimpleXML 元素。

node 引數是 DOM 元素節點。可以提供可選的 class_name,以便 simplexml_import_dom() 將返回 SimpleXMLElement 類的指定子類的物件。此函式返回 SimpleXMLElement 或在失敗時返回 null。

示例

檢視以下示例:

<?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;
?>

它將產生以下輸出

PHP Handbook

獲取節點值

以下程式碼顯示如何從 XML 檔案獲取節點值,XML 應如下所示:

<?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>

示例

PHP 程式碼應如下所示:

<?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>"; 
   }
?>

它將產生以下輸出

Java
Gopal

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