PHP Conference Japan 2024

xml_set_default_handler

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_set_default_handler设置默认处理器

描述

xml_set_default_handler(XMLParser $parser, callable|string|null $handler): true

为 XML 解析器 parser 设置默认处理器函数。

参数

parser

XML 解析器。

handler

如果传递了null,则处理器将重置为其默认状态。

警告

空字符串也会重置处理器,但是从 PHP 8.4.0 开始已弃用。

如果 handler 是一个 callable,则该可调用对象将被设置为处理器。

如果 handler 是一个 string,它可以是用 xml_set_object() 设置的对象的方法名称。

警告

从 PHP 8.4.0 开始已弃用。

警告

从 PHP 8.4.0 开始,可调用对象在设置处理器时将被检查其有效性,而不是在调用时检查。这意味着必须在将方法字符串设置为回调之前调用 xml_set_object()。但是,由于此行为从 PHP 8.4.0 开始也已弃用,因此建议改为使用正确的 callable 来表示方法。

处理器的签名必须是

handler(XMLParser $parser, string $data): void
parser
调用处理器的 XML 解析器。
data
data 包含字符数据。这可能是 XML 声明、文档类型声明、实体或其他不存在其他处理器的其他数据。

返回值

始终返回 true

变更日志

版本 描述
8.4.0 将非 callable string 传递给 handler 现在已弃用,请对方法使用合适的可调用对象,或使用 null 来重置处理器。
8.4.0 现在在设置处理器时检查 handler 作为 callable 的有效性,而不是在调用时检查。
8.0.0 parser 现在期望一个 XMLParser 实例;以前,期望的是一个有效的 xml resource
添加注释

用户贡献的注释 3 条注释

jp dot amarok at email dot cz
7 个月前
对于任何也在想知道这个函数实际处理什么事件的人

它用于在找到 XML 注释或附加声明(如 xml-stylesheet)时。在这种情况下,data 参数包含完整的字符串,例如

<!-- this is a comment -->
<?xml-stylesheet title="mystyle" type="text/xsl" href="style.xsl" ?>
phillip
19 年前
在我看来,在 PHP5 中,定义为默认处理程序(使用 xml_set_default_handler())的函数不再传递 cdata 了

例如
xml_set_element_handler($this->parser, 'parseSTART', 'parseEND');
xml_set_default_handler($this->parser, 'parseDEFAULT');
function parseSTART() { ... }
function parseEND() { ... }
function parseDEFAULT() { ... }

在 PHP5 下,parseDEFAULT 将不会传递任何 cdata,但在 PHP4 下会。至少这是我对迁移到 PHP5 后(未)发生奇怪情况的看法。

我的解决方案是添加 xml_set_character_data_handler($parser, 'parseDEFAULT')。这对我有用。
anoril at anoril dot com
18 年前
我在两个 PHP5 安装中遇到了同样的问题:一个接受使用默认处理器,而另一个只使用 character_data 处理器。

也许是配置问题……

;) Nonor。
To Top