PHP XML Expat 解析器
#內建的Expat 解析器使在PHP 中處理XML 文件成為可能。
XML 是什麼?
XML 用於描述數據,其焦點是數據是什麼。 XML 檔案描述了資料的結構。
在 XML 中,沒有預先定義的標籤。您必須定義自己的標籤。
如需學習更多關於 XML 的知識,請造訪我們的 XML 教學。
Expat 是什麼?
如需讀取和更新 - 建立和處理 - 一個 XML 文檔,您需要 XML 解析器。
有兩種基本的 XML 解析器類型:
· 以樹為基礎的解析器:此解析器將 XML 文件轉換為樹型結構。它分析整篇文檔,並提供了對樹中元素的訪問,例如文檔物件模型 (DOM)。
· 以事件為基礎的解析器:將 XML 文件視為一連串的事件。當某個特定的事件發生時,解析器會呼叫函數來處理。
Expat 解析器是基於事件的解析器。
基於事件的解析器集中在 XML 文件的內容,而不是它們的結構。正因為如此,基於事件的解析器能夠比基於樹的解析器更快存取資料。
請看下面的XML 片段:
<from>Jani</from>
基於事件的解析器把上面的XML 報告為一連串的三個事件:
· 開始元素:from
· 開始CDATA 部分,值:Jani
· 良好的XML。不過這個實例是無效的 XML,因為沒有與它關聯的文件類型聲明 (DTD)。
然而,在使用 Expat 解析器時,這沒有區別。 Expat 是不檢查有效性的解析器,忽略任何 DTD。
作為一款基於事件、非驗證的 XML 解析器,Expat 快速且輕巧,十分適合 PHP 的 Web 應用程式。
註解:XML 文件必須形式良好,否則 Expat 會產生錯誤。
#XML Expat 解析器函數是 PHP 核心的組成部分。無需安裝就可以使用這些函數。
XML 檔案
下面的XML 檔案將會套用在我們的實例中:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
#初始化XML 解析器
我們要在PHP 中初始化XML 解析器,為不同的XML 事件定義處理器,然後解析這個XML 檔案。
實例
<?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))); } //Free the XML parser xml_parser_free($parser); ?>
以上程式碼將輸出:
-- Note --
To: Tove From: Jani
Heading: Reminder
Message: Don't forget me this weekend!
運作原理:
1. 透過xml_parser_create() 函數初始化XML 解析器
#2. 建立不同事件處理程序的配合不同事件處理程序的配合不同事件處理程序的的函數
3. 新增xml_set_element_handler() 函數來定義,當解析器遇到開始和結束標籤時執行哪個函數
##4. 新增xml_set_character_data_handler() 函數來定義,當解析器遇到字元資料時執行哪個函數5. 透過xml_parse() 函數來解析檔案"test.xml"6. 萬一有錯誤的話,加上xml_error_string() 函數把XML錯誤轉換為文字說明7. 呼叫xml_parser_free() 函數以釋放指派給xml_parser_create() 函數的記憶體PHP XML Parser 簡介
#PHP XML Parser 簡介 XML 函數可讓您解析XML 文檔,但無法對其進行驗證。 XML 是一種用於標準結構化文件交換的資料格式。您可以在我們的 php.cn 中找到更多有關 XML 的資訊。
此擴充功能使用 Expat XML 解析器。
Expat 是一種基於事件的解析器,它把 XML 文件視為一系列事件。當某個事件發生時,它會呼叫一個指定的函數來處理它。
Expat 是無驗證的解析器,忽略任何連結到文件的 DTD。但是,如果文件的形式不好,則會以錯誤訊息結束。
由於它是一種基於事件,且無驗證的解析器,Expat 具有快速且適合 Web 應用程式的特性。
XML 解析器函數可讓您建立 XML 解析器,並為 XML 事件定義句柄。
安裝
XML Parser 函數是 PHP 核心的組成部分。無需安裝即可使用這些函數。 PHP XML Parser 函數PHP:指示支援該函數的最早的 PHP 版本。