PHP課程
/ XML Expat
XML Expat
XML Expat 解析器
Expat 解析器是一個基于事件的解析器。
請看以下的 XML 片段:
<from>Jani</from>
一個基于事件的解析器會將上述 XML 報告為一系列三個事件:
- 開始元素:
from
- 開始 CDATA 部分,值:
Jani
- 關(guān)閉元素:
from
XML Expat 解析器函數(shù)是 PHP 核心的一部分。使用這些函數(shù)無需安裝。
XML 文件
在下面的例子中將使用 XML 文件 "note.xml":
<?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
初始化 XML Expat 解析器
我們希望在PHP中初始化 XML Expat 解析器,為不同的 XML 事件定義一些處理程序,然后解析 XML 文件。
實例
<?php // 初始化 XML 解析器 $parser=xml_parser_create(); // 在元素開始時使用的函數(shù) 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: "; } } // 在元素結(jié)束時使用的函數(shù) function stop($parser,$element_name) { echo "<br>"; } // 在找到字符數(shù)據(jù)時使用的函數(shù) function char($parser,$data) { echo $data; } // 指定元素處理程序 xml_set_element_handler($parser,"start","stop"); // 指定數(shù)據(jù)處理程序 xml_set_character_data_handler($parser,"char"); // 打開 XML 文件 $fp=fopen("note.xml","r"); // 讀取數(shù)據(jù) while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML 錯誤:%s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } // 釋放 XML 解析器 xml_parser_free($parser); ?>
運行實例
例子解釋:
- 使用
xml_parser_create()
函數(shù)初始化 XML 解析器 - 創(chuàng)建與不同事件處理程序一起使用的函數(shù)
- 添加
xml_set_element_handler()
函數(shù),以指定解析器在遇到開始和結(jié)束標記時將執(zhí)行哪個函數(shù) - 添加
xml_set_character_data_handler()
函數(shù),以指定解析器在遇到字符數(shù)據(jù)時將執(zhí)行哪個函數(shù) - 使用
xml_parse()
函數(shù)解析"note.xml"
文件 - 如果出現(xiàn)錯誤,請?zhí)砑?
xml_error_string()
函數(shù)以將 XML 錯誤轉(zhuǎn)換為文本描述 - 調(diào)用
xml_parser_free()
函數(shù),以釋放使用xml_parser_create()
函數(shù)分配的內(nèi)存
PHP XML Expat 解析器參考手冊
有關(guān) PHP Expat 函數(shù)的更多信息,請訪問我們的 PHP XML 解析器參考手冊。