qidao123.com技术社区-IT企服评测·应用市场

标题: PHP XML Expat 解析器 功能 用法运用 详解 [打印本页]

作者: 老婆出轨    时间: 2025-3-17 08:04
标题: PHP XML Expat 解析器 功能 用法运用 详解
PHP 的 XML Expat 解析器是一种基于事件的流式解析器,适合处理大型 XML 文件或需要高效内存使用的场景。以下是其 功能、用法及运用详解
一、焦点特性

二、焦点函数与用法

1. 创建解析器
  1. $parser = xml_parser_create();
  2. // 可选:设置编码(默认 UTF-8)
  3. xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
复制代码
2. 定义回调函数

需为以下事件注册处理函数:
  1. // 开始标签回调
  2. function startElement($parser, $name, $attrs) {
  3.     echo "开始标签: $name\n";
  4.     // $attrs 是属性数组,如 ["id" => "123"]
  5. }
  6. // 结束标签回调
  7. function endElement($parser, $name) {
  8.     echo "结束标签: $name\n";
  9. }
  10. // 文本内容回调
  11. function characterData($parser, $data) {
  12.     echo "文本内容: $data\n";
  13. }
  14. // 错误处理回调
  15. function errorHandler($parser, $errorCode, $errorMessage) {
  16.     die("XML 错误: $errorMessage");
  17. }
复制代码
3. 绑定回调函数到解析器
  1. xml_set_element_handler($parser, "startElement", "endElement");
  2. xml_set_character_data_handler($parser, "characterData");
  3. xml_set_default_handler($parser, "errorHandler"); // 处理未定义事件
复制代码
4. 解析 XML 数据
  1. // 解析字符串
  2. xml_parse($parser, $xmlString);
  3. // 解析文件
  4. xml_parse($parser, file_get_contents("data.xml"));
  5. // 释放解析器资源
  6. xml_parser_free($parser);
复制代码
三、完整示例
  1. // 创建解析器
  2. $parser = xml_parser_create();
  3. // 定义回调函数
  4. function startElement($parser, $name, $attrs) {
  5.     global $currentTag;
  6.     $currentTag = $name;
  7.     echo "开始标签: $name\n";
  8.     if (!empty($attrs)) {
  9.         echo "属性: " . json_encode($attrs) . "\n";
  10.     }
  11. }
  12. function endElement($parser, $name) {
  13.     echo "结束标签: $name\n";
  14. }
  15. function characterData($parser, $data) {
  16.     global $currentTag;
  17.     $data = trim($data);
  18.     if (!empty($data)) {
  19.         echo "标签 $currentTag 的内容: $data\n";
  20.     }
  21. }
  22. // 绑定回调
  23. xml_set_element_handler($parser, "startElement", "endElement");
  24. xml_set_character_data_handler($parser, "characterData");
  25. // 解析 XML
  26. $xml = '<book id="101"><title>PHP Guide</title><price>49.99</price></book>';
  27. xml_parse($parser, $xml);
  28. // 释放资源
  29. xml_parser_free($parser);
复制代码
输出:
  1. 开始标签: book
  2. 属性: {"id":"101"}
  3. 开始标签: title
  4. 标签 title 的内容: PHP Guide
  5. 结束标签: title
  6. 开始标签: price
  7. 标签 price 的内容: 49.99
  8. 结束标签: price
  9. 结束标签: book
复制代码
四、高级技巧

五、实用场景

六、与其他解析器对比

解析器范例内存占用实用场景Expat流式低大型文件、及时解析DOM树形高需要频繁查询/修改 XML 结构SimpleXML树形中简单 XML 读写通过合理使用 Expat 解析器,可以在 PHP 中高效处理 XML 数据,尤其适合资源敏感或大规模数据场景。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4