CLXXIX. XML 语法解析函数简介XML(eXtensible Markup Language,可扩展标记语言)是一种在 web 上进行文档交换的数据格式。该语言是由 W3C(World Wide Web Concortium,世界万维网组织)定义的一种标准。可以访问 http://www.w3.org/XML/ 以获取关于 XML 及其相关技术的更多信息。 本扩展模块可为 James Clark 的 expat 提供支持。该工具包帮助解析 XML 文档(而非 XML 文档的有效化)。它支持三种源代码的编码方式,这三种编码方式也被 PHP 本身所支持,它们分别是:US-ASCII、ISO-8859-1 和 UTF-8。本系统尚不支持 UTF-16。 本扩展模块使用户能够建立 XML 语法解析器,并对不同的 XML 事件定义对应的处理器。每个 XML 语法解析器都有若干个可根据需要调整的参数。 需求本扩展模块默认使用 expat compat layer。它也可以使用 expat,可以访问 http://www.jclark.com/xml/expat.html 来获取。expat 自带的 Makefile 文件不会生成默认的扩展库,可以使用以下的生成规则来实现:
请访问 http://sourceforge.net/projects/expat/ 以获取 expat 源文件的 RPM 包。 安装
这些函数默认为有效的,它们使用了捆绑的 expat 库。您可以通过参数 PHP 的 Windows 版本已经内置该扩展模块的支持。无需加载任何附加扩展库即可使用这些函数。 运行时配置本扩展模块在 php.ini 中未定义任何配置选项。 资源类型xml由 xml_parser_create() 和 xml_parser_create_ns() 返回的 xml 资源引用了一个 XML 解析器实例,将被用在本扩展库提供的函数中。 预定义常量以下常量由本扩展模块定义,因此只有在本扩展模块被编译到 PHP 中,或者在运行时被动态加载后才有效。
事件处理器XML 事件处理器定义如下: 表 1. 已支持的 XML 事件处理器
大小写折叠(Case Folding)元素处理函数可能会导致元素名称“大小写折叠”(case-folded)。“大小写折叠”被 XML 标准定义为“一个应用于一系列字符的过程,在该过程中,这些字符中的所有的非大写字符将被替换成它们对应大写等价字符”。换句话说,对于 XML,“大小写折叠”就是指将字符串转换成大写字符。 所有被传递给处理器函数的元素名称将默认的发生“大小写折叠”。该过程可以分别被 xml_parser_get_option() 和 xml_parser_set_option() 函数查询和控制。 错误代码以下常量被定义为 XML 的错误代码,将由 xml_parse() 返回:
字符编码PHP 的 XML 扩展库支持不同字符编码(character encoding)的 Unicode 字符集。字符编码有两种形式,它们分别是“源编码”(source encoding)和“目标编码”(target encoding)。PHP 对文档内部表示的编码方式是 UTF-8。 源编码将在 XML 文档被解析后完成。源编码可在建立一个 XML 解析器时指明(该编码方式在 XML 解析器的生命周期中不能被再次改变)。支持的编码方式包括 ISO-8859-1,US-ASCII 和 UTF-8。前两种为单字节编码,即每个字符被一个单一的字节表示。UTF-8 支持 1 至 4 个字节的多 bit(最多 12)字符编码。PHP 默认使用 ISO-8859-1 作为源编码方式。 目标编码将在 PHP 向 XML 处理器函数传送数据时被完成。当 XML 解析器被建立后,目标编码将被设置成与源编码相同的编码方式,但该方式可在任何时候被更改。目标编码将影响字符数据、标记符名称以及处理指令目标(PI target)。 如果 XML 解析器遇到其源编码方式表示能力之外的字符,它将返回一个错误。 当 PHP 在被解析的 XML 文档中遇到当前目标编码无法表示的字符时,这些字符将被“降级”。简单的说,这些字符将被问号替换。 范例以下是 PHP 脚本解析 XML 文档的一些范例。 XML 元素结构范例第一个范例用缩进格式显示一个文档中起始元素的结构。 XML 标记符映射范例
XML 外部实体范例该范例能够高亮显示 XML 源代码。它将说明如何外部实体指向处理器来包含和解析其它文档,如何处理 PIs,以及一种确定包含有 PIs 的代码的可信度。 能被该范例使用的的 XML 文档(xmltest.xml 和 xmltest2.xml)被列在该范例之后。
以下文档将被 xmltest.xml 文件调用:
| ||||||||||||||||||||||||||||||||||||||||||||||||