Penyitaan Analisis XML Expat PHP

內建的 Expat 解析器使在 PHP 中處理 XML 文件成為可能。

什麼是 XML?

XML 用於描述數據,其焦點是數據是什麼。XML 文件描述了數據的結構。

在 XML 中,沒有預定义的標籤。您必須定義自己的標籤。

如果希望學習更多有關 XML 的內容,請訪問我們的 Panduan XML

什麼是 Expat?

如需讀取和更新 - 創建創建並處理 - 一個 XML 文件,您需要 XML 解析器。

有兩種基本的 XML 解析器類型:

  • 基於樹的解析器:這種解析器將 XML 文件轉換為樹型結構。它分析整篇文檔,並提供了 API 來訪問樹中的元素,例如文檔對象模型 (DOM)。
  • 基於事件的解析器:將 XML 文件視為一系列的事件。當某個具體的事件發生時,解析器會調用函數來處理。

Expat 解析器是基於事件的解析器。

基於事件的解析器專注於 XML 文件的内容,而不是它們的結果。正因如此,基於事件的解析器能夠比基於樹的解析器更快地訪問數據。

請看以下的 XML 片段:

<from>John</from>

基於事件的解析器將上面的 XML 計為一連串的三个事件:

  • 開始元素:from
  • 開始 CDATA 部分, 值:John
  • 關閉元素: from

上面的 XML 范例包含了形式良好的 XML。不過這個例子是無效的 XML,因為沒有與它相關的文檔類型聲明 (DTD),也沒有內嵌的 DTD。

不過,在使 用 Expat 解析器時,這沒有區別。Expat 是不檢查有效性的解析器,忽略任何 DTD。

作為一款基於事件、非驗證的 XML 解析器,Expat 快速且輕巧,十分適合 PHP 的網絡應用程序。

註釋:XML 文件必須形式良好,否則 Expat 將生成錯誤。

安裝

XML Expat 解析器是 PHP 核心的组成部分。無需安裝就可以使用這些函數。

XML 文件

在我们的例子中將使用以下的 XML 文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

Menginitkan pemecah XML

Kami perlu menginitkan pemecah XML di PHP, untuk menentukan penanganan acara XML yang berbeda, lalu mengurai berkas XML ini.

contoh

<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo "-- Note --<br />";
    break; 
    case "TO":
    echo "To: ";
    break; 
    case "FROM":
    echo "From: ";
    break; 
    case "HEADING":
    echo "Heading: ";
    break; 
    case "BODY":
    echo "Message: ";
    }
  }
//Function to use at the end of an element
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Function to use when finding character data
function char($parser,$data)
  {
  echo $data;
  }
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) or 
  die (sprintf("XML Error: %s at line %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }
//Lepaskan pemecah XML
xml_parser_free($parser);
?>

Output kod di atas:

--Catatan--
Ke: George
Dari: John
Tajuk: Pengingat
Pesan: Jangan lupa pertemuan!

Penggalian prinsip kerja:

  • Mengawalkan pemecah XML melalui fungsi xml_parser_create()
  • Cipta fungsi untuk beroperasi bersama-sama dengan program pemrosesan peristiwa yang berbeza
  • Tambahkan fungsi xml_set_element_handler() untuk menentukan mana fungsi yang akan dijalankan apabila pemecah mendapati tag bermula dan tamat
  • Tambahkan fungsi xml_set_character_data_handler() untuk menentukan mana fungsi yang akan dijalankan apabila pemecah mendapati data aksara
  • Menggali fail 'test.xml' melalui fungsi xml_parse()
  • Jika terdapat kesalahan, tambahkan fungsi xml_error_string() untuk menukar kesalahan XML kepada penjelasan teks
  • Panggil fungsi xml_parser_free() untuk melepaskan memori yang diatributkan kepada fungsi xml_parser_create()

Maklumat lanjut tentang pemecah PHP Expat

Untuk mendapatkan maklumat lanjut tentang fungsi PHP Expat, sila lawati panduan rujukan parser XML PHP kami.