background image

的是文档仍然需要完整的格式,否则

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()

 

来注册。