的是文档仍然需要完整的格式,否则
Expat(和其他符合 XML
标准的解析器一样)将会随着出错信息而停止。
作为不检查有效性的解析器,
Exapt
的快速性和轻巧性使其十分适合互联网程序。
编译
Expat
Expat 可以编译进 PHP3.0.6 版本(或以上)中。从 Apache1.3.9 开始,Expat 已经作为 Apache 的一部分。
在
Unix 系统中,通过-with-xml 选项配置 PHP,你可以将其编译入 PHP
。
如果你将
PHP 编译为 Apache 的模块,而 Expat 将默认作为 Apache 的一部分。在 Windows 中,你则必须要加
载
XML
动态连接库。
XML 范例:XMLstats
了解
Expat 的函数的一个办法就是通过范例。我们所要讨论的范例是使用 Expat 来收集 XML
文档的统计数据。
对于文档中每个元素,以下信息都将被输出:
该元素在文档中使用的次数
该元素中字符数据的数量
元素的父元素
元素的子元素
注意:为了演示,我们利用
PHP
来产生一个结构来保存元素的父元素和子元素
准备
用于产生
XML 解析器实例的函数为 xml_parser_create()。该实例将用于以后的所有函数。这个思路非常类似
于
PHP 中 MySQL 函数的连接标记。在解析文档前,基于事件的解析器通常要求你注册回调函数-用于特定的事件
发生时调用。
Expat
没有例外事件,它定义了如下七个可能事件:
对象
XML
解析函数 描述
元素
xml_set_element_handler()
元素的开始和结束
字符数据
xml_set_character_data_handler()
字符数据的开始
外部实体
xml_set_external_entity_ref_handler()
外部实体出现
未解析外部实体
xml_set_unparsed_entity_decl_handler()
未解析的外部实体出现
处理指令
xml_set_processing_instruction_handler()
处理指令的出现
记法声明
xml_set_notation_decl_handler()
记法声明的出现
默认
xml_set_default_handler()
其它没有指定处理函数的事件
所有的回调函数必须将解析器的实例作为其第一个参数(此外还有其它参数)。
对于本文最后的范例脚本。你需要注意的是它既用到了元素处理函数又用到了字符数据处理函数。元素的回调处
理函数通过
xml_set_element_handler()
来注册。