- PHP 教程
- PHP - 首页
- PHP - 简介
- PHP - 安装
- PHP - 历史
- PHP - 特性
- PHP - 语法
- PHP - Hello World
- PHP - 注释
- PHP - 变量
- PHP - Echo/Print
- PHP - var_dump
- PHP - $ 和 $$ 变量
- PHP - 常量
- PHP - 魔法常量
- PHP - 数据类型
- PHP - 类型转换
- PHP - 类型混合
- PHP - 字符串
- PHP - 布尔值
- PHP - 整数
- PHP - 文件与 I/O
- PHP - 数学函数
- PHP - Heredoc 和 Nowdoc
- PHP - 复合类型
- PHP - 文件包含
- PHP - 日期和时间
- PHP - 标量类型声明
- PHP - 返回类型声明
- PHP 运算符
- PHP - 运算符
- PHP - 算术运算符
- PHP - 比较运算符
- PHP - 逻辑运算符
- PHP - 赋值运算符
- PHP - 字符串运算符
- PHP - 数组运算符
- PHP - 条件运算符
- PHP - 展开运算符
- PHP - 空值合并运算符
- PHP - 宇宙飞船运算符
- PHP 控制语句
- PHP - 决策制定
- PHP - If…Else 语句
- PHP - Switch 语句
- PHP - 循环类型
- PHP - For 循环
- PHP - Foreach 循环
- PHP - While 循环
- PHP - Do…While 循环
- PHP - Break 语句
- PHP - Continue 语句
- PHP 函数
- PHP - 函数
- PHP - 函数参数
- PHP - 按值传递
- PHP - 按引用传递
- PHP - 默认参数
- PHP - 具名参数
- PHP - 可变参数
- PHP - 返回值
- PHP - 传递函数
- PHP - 递归函数
- PHP - 类型提示
- PHP - 变量作用域
- PHP - 严格类型
- PHP - 匿名函数
- PHP - 箭头函数
- PHP - 可变函数
- PHP - 局部变量
- PHP - 全局变量
- PHP 超全局变量
- PHP - 超全局变量
- PHP - $GLOBALS
- PHP - $_SERVER
- PHP - $_REQUEST
- PHP - $_POST
- PHP - $_GET
- PHP - $_FILES
- PHP - $_ENV
- PHP - $_COOKIE
- PHP - $_SESSION
- PHP 文件处理
- PHP - 文件处理
- PHP - 打开文件
- PHP - 读取文件
- PHP - 写入文件
- PHP - 文件是否存在
- PHP - 下载文件
- PHP - 复制文件
- PHP - 追加文件
- PHP - 删除文件
- PHP - 处理 CSV 文件
- PHP - 文件权限
- PHP - 创建目录
- PHP - 列出文件
- 面向对象 PHP
- PHP - 面向对象编程
- PHP - 类和对象
- PHP - 构造函数和析构函数
- PHP - 访问修饰符
- PHP - 继承
- PHP - 类常量
- PHP - 抽象类
- PHP - 接口
- PHP - 特性
- PHP - 静态方法
- PHP - 静态属性
- PHP - 命名空间
- PHP - 对象迭代
- PHP - 封装
- PHP - Final 关键字
- PHP - 重载
- PHP - 克隆对象
- PHP - 匿名类
- PHP Web 开发
- PHP - Web 概念
- PHP - 表单处理
- PHP - 表单验证
- PHP - 表单电子邮件/URL
- PHP - 完整表单
- PHP - 文件包含
- PHP - GET 和 POST
- PHP - 文件上传
- PHP - Cookie
- PHP - 会话
- PHP - 会话选项
- PHP - 发送电子邮件
- PHP - 清理输入
- PHP - Post-Redirect-Get (PRG)
- PHP - 闪存消息
- PHP 高级
- PHP - MySQL
- PHP.INI 文件配置
- PHP - 数组解构
- PHP - 编码规范
- PHP - 正则表达式
- PHP - 错误处理
- PHP - Try…Catch
- PHP - Bug 调试
- PHP - 适用于 C 开发人员
- PHP - 适用于 PERL 开发人员
- PHP - 框架
- PHP - Core PHP 与框架
- PHP - 设计模式
- PHP - 过滤器
- PHP - JSON
- PHP - 异常
- PHP - 特殊类型
- PHP - 哈希
- PHP - 加密
- PHP - is_null() 函数
- PHP - 系统调用
- PHP - HTTP 认证
- PHP - 交换变量
- PHP - Closure::call()
- PHP - 过滤后的 unserialize()
- PHP - IntlChar
- PHP - CSPRNG
- PHP - 预期
- PHP - Use 语句
- PHP - 整数除法
- PHP - 已弃用的功能
- PHP - 已删除的扩展和 SAPI
- PHP - PEAR
- PHP - CSRF
- PHP - FastCGI 进程
- PHP - PDO 扩展
- PHP - 内置函数
- PHP 有用资源
- PHP - 速查表
- PHP - 问答
- PHP - 快速指南
- PHP - 在线编译器
- PHP - 有用资源
- PHP - 讨论
PHP - SAX 解析器示例
PHP 在 php.ini 设置文件中默认启用了 XML 解析器扩展。此解析器实现 SAX API,这是一种基于事件的解析算法。
基于事件的解析器不会将整个 XML 文档加载到内存中。相反,它一次读取一个节点。解析器允许您实时交互。一旦您移至下一个节点,旧节点就会从内存中移除。
基于 SAX 的解析机制比基于树的解析器更快。PHP 库包含处理 XML 事件的函数,如本章所述。
解析 XML 文档的第一步是使用 xml_parse_create() 函数创建一个解析器对象。
xml_parser_create(?string $encoding = null): XMLParser
此函数创建一个新的 XML 解析器并返回一个 XMLParser 对象,供其他 XML 函数使用。
xml_parse() 函数开始解析 XML 文档。
xml_parse(XMLParser $parser, string $data, bool $is_final = false): int
xml_parse() 解析 XML 文档。配置事件的处理程序会根据需要调用多次。
XMLParser 扩展提供了不同的事件处理程序函数。
xml_set_element_handler()
此函数为 XML 解析器设置元素处理程序函数。每当 XML 解析器遇到开始或结束标记时,都会发出元素事件。开始标记和结束标记有单独的处理程序。
xml_set_element_handler(XMLParser $parser, callable $start_handler, callable $end_handler): true
当打开新的 XML 元素时,会调用 start_handler() 函数。当关闭 XML 元素时,会调用 end_handler() 函数。
xml_set_character_data_handler()
此函数为 XML 解析器设置字符数据处理程序函数。字符数据大致是 XML 文档的所有非标记内容,包括标记之间的空白字符。
xml_set_character_data_handler(XMLParser $parser, callable $handler): true
xml_set_processing_instruction_handler()
此函数为 XML 解析器设置处理指令 (PI) 处理程序函数。<?php ?> 是一个处理指令,其中 php 被称为“PI 目标”。这些的处理是特定于应用程序的。
xml_set_processing_instruction_handler(XMLParser $parser, callable $handler): true
一个处理指令具有以下格式:
<?target data ?>
xml_set_default_handler()
此函数为 XML 解析器设置默认处理程序函数。不属于其他处理程序的内容将转到默认处理程序。您将在默认处理程序中获得 XML 和文档类型声明等内容。
xml_set_default_handler(XMLParser $parser, callable $handler): true
示例
以下示例演示了如何使用 SAX API 解析 XML 文档。我们将使用 SAX.xml 如下所示:
<?xml version = "1.0" encoding = "utf-8"?> <tutors> <course> <name>Android</name> <country>India</country> <email>[email protected]</email> <phone>123456789</phone> </course> <course> <name>Java</name> <country>India</country> <email>[email protected]</email> <phone>123456789</phone> </course> <course> <name>HTML</name> <country>India</country> <email>[email protected]</email> <phone>123456789</phone> </course> </tutors>
示例
解析上述文档的 PHP 代码如下所示。它打开 XML 文件并调用 xml_parse() 函数,直到到达其文件末尾。事件处理程序将数据存储在 tutors 数组中。然后按元素逐个输出数组。
<?php // Reading XML using the SAX(Simple API for XML) parser $tutors = array(); $elements = null; // Called to this function when tags are opened function startElements($parser, $name, $attrs) { global $tutors, $elements; if(!empty($name)) { if ($name == 'COURSE') { // creating an array to store information $tutors []= array(); } $elements = $name; } } // Called to this function when tags are closed function endElements($parser, $name) { global $elements; if(!empty($name)) { $elements = null; } } // Called on the text between the start and end of the tags function characterData($parser, $data) { global $tutors, $elements; if(!empty($data)) { if ($elements == 'NAME' || $elements == 'COUNTRY' || $elements == 'EMAIL' || $elements == 'PHONE') { $tutors[count($tutors)-1][$elements] = trim($data); } } } $parser = xml_parser_create(); xml_set_element_handler($parser, "startElements", "endElements"); xml_set_character_data_handler($parser, "characterData"); // open xml file if (!($handle = fopen('sax.xml', "r"))) { die("could not open XML input"); } while($data = fread($handle, 4096)) { xml_parse($parser, $data); } xml_parser_free($parser); $i = 1; foreach($tutors as $course) { echo "course No - ".$i. '<br/>'; echo "course Name - ".$course['NAME'].'<br/>'; echo "Country - ".$course['COUNTRY'].'<br/>'; echo "Email - ".$course['EMAIL'].'<br/>'; echo "Phone - ".$course['PHONE'].'<hr/>'; $i++; } ?>
以上代码给出以下输出:
course No - 1 course Name - Android Country - India Email - [email protected] Phone - 123456789 ________________________________________ course No - 2 course Name - Java Country - India Email - [email protected] Phone - 123456789 ________________________________________ course No - 3 course Name - HTML Country - India Email - [email protected] Phone - 123456789 ________________________________________