PHP扩展之XML操作(二)——XML解析器安装及概述



一、概述及安装

XML(可扩展标记语言,eXtensible Markup Language) 是一种在互联网上用于结构化文档交互的数据格式。 它是互联网协会(W3C)定义的一个标准。与 XML 及其相关技术的信息可访问http://www.php.cn/。

此 PHP 扩展实现 支持 James Clark 使用 PHP 编写的 expat。 此工具包可解析(但不能验证) XML 文档。它支持 PHP 所提供的 3 种字符编码: US-ASCII, ISO-8859-1 和 UTF-8。 不支持 UTF-16。

此扩展可 创建 XML 解析器 并为不同的 XML 事件定义 处理程序(handler)。 每个 XML 解析器还存在少数可以调节的参数。

此扩展需要 libxml PHP 扩展。这表示需要使用 --enable-libxml ,尽管这将隐式完成因为 libxml 是缺省开启的。

缺省情况下,此扩展使用expat compat layer 。也可使用expat, 此库位于 http://www.php.cn/。 使用expat库中的 Makefile 是不会默认构建出库文件的,可使用以下构建规则进行构建:


libexpat.a: $(OBJS)
    ar -rc $@ $(OBJS)
    ranlib $@

expat 的源代码 RPM 安装包可在 http://www.php.cn/ 找到。

此扩展默认为启用,编译时可通过下列选项禁用: --disable-xml

这些函数默认为有效的,使用了捆绑的 expat 库。您可以通过参数 --disable-xml 来屏蔽 XML 的支持。如果您将 PHP 编译为 Apache 1.3.9 或更高版本的一个模块, PHP 将自动使用 Apache 捆绑的 expat 库。如果您不希望使用该捆绑的 expat 库,请在运行 PHP 的 configure 配置脚本时使用参数 --with-expat-dir=DIR ,其中 DIR 应该指向 expat 安装的根目录。

PHP 的 Windows 版本已内建对此扩展的支持。不需要载入额外的扩展来使用这些函数。

二、事件处理器

XML 事件处理器的定义如下:

被支持的 XML 处理器
PHP 处理器函数 事件描述
xml_set_element_handler() 当 XML 解析器遇到开始或结束标签时,会触发元素事件。 开始标签和结束标签有不同的处理器。
xml_set_character_data_handler() 字符数据范指 XML 文档中所有非标记的内容,包括标签之间的空格。 注意,XML 解析器不会添加或删除任何空格,由应用程序(你)来判断空格是否有意义。
xml_set_processing_instruction_handler() PHP 程序员必须熟练掌握处理指令(PI)。<?php ?>是处理指令, 其中php被称为“处理指令对象”。 除所有以“XML”开头的处理指令对象是系统保留的外, 其他的处理函数均是由应用程序指定的。
xml_set_default_handler() 不执行其他处理函数,则会执行缺省的处理函数。 在缺省的处理函数中可取得如 XML 和文档类型声明等信息。
xml_set_unparsed_entity_decl_handler() 未解析的实体声明(NDATA)会调用此处理函数。
xml_set_notation_decl_handler() 符号声明会调用此处理函数
xml_set_external_entity_ref_handler() 当 XML 解析器发现对外部已解析的普通实体的引用时, 会调用此处理函数。例如,引用一个文件或URL。实例可参见 XML 外部实体例程。

三、大写转换

元素处理函数可取得元素名称转换为 case-folded(大写字母)形式。 Case-folding 被定义为“将非大写字母替换为相对应的大写字母的字符串操作”。换句话说,在 XML 中,case-folding 就是转换为大写。

默认情况下,所有的通过处理函数的元素名都被转换为大写字母。每个 XML 解析器可分别通过 xml_parser_get_option()与xml_parser_set_option()函数来查询与控制此项功能。

四、错误代码

下列常量是 XML 相关的错误代码( xml_parse()函数的返回值):

  • XML_ERROR_NONE

  • XML_ERROR_NO_MEMORY

  • XML_ERROR_SYNTAX

  • XML_ERROR_NO_ELEMENTS

  • XML_ERROR_INVALID_TOKEN

  • XML_ERROR_UNCLOSED_TOKEN

  • XML_ERROR_PARTIAL_CHAR

  • XML_ERROR_TAG_MISMATCH

  • XML_ERROR_DUPLICATE_ATTRIBUTE

  • XML_ERROR_JUNK_AFTER_DOC_ELEMENT

  • XML_ERROR_PARAM_ENTITY_REF

  • XML_ERROR_UNDEFINED_ENTITY

  • XML_ERROR_RECURSIVE_ENTITY_REF

  • XML_ERROR_ASYNC_ENTITY

  • XML_ERROR_BAD_CHAR_REF

  • XML_ERROR_BINARY_ENTITY_REF

  • XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF

  • XML_ERROR_MISPLACED_XML_PI

  • XML_ERROR_UNKNOWN_ENCODING

  • XML_ERROR_INCORRECT_ENCODING

  • XML_ERROR_UNCLOSED_CDATA_SECTION

  • XML_ERROR_EXTERNAL_ENTITY_HANDLING

五、字符编码

PHP 的 XML 扩展通过几种不同的字符编码支持Unicode 字符集。 有两类字符编码, 原始编码 和 目标编码. 在PHP的内部展现中,文档始终是使用UTF-8编码。

当 XML 被 解析 后,原始编码就完成了。 在创建 XML 解析器时, 可以指定原始编码(在XML 解析器此后的生命周期里,不能修改此编码)。 被支持的原始编码有 ISO-8859-1, US-ASCII 和 UTF-8. 前两种是单字节编码, 即每一个字符表现为一个字节。 UTF-8 可将字符编码为一串不定数量(最高21)的位(bit), 排列成1到4个字节。 PHP 中使用的默认原始编码是ISO-8859-1.

当 PHP 将数据传给 XML 处理函数时,目标编码就完成了。 在创建 XML 处理器时,目标编码被设定为与原始编码相同,但可任意修改。 目标编码会影响字符数据及标签名,与处理指令目标。

如 XML 解析器遇到原始编码所能表示的范围之外的字符时,会返回一个错误。

如 PHP 遇到在被解析的 XML 文档中不能用所指定的目标编码表示的字符时, 这个问题字符会被“降级”。通常来说,就是那些字符会被替换成问号(?)。

以上就是PHP扩展之XML操作(二)——XML解析器安装及概述的内容,更多相关内容请关注编程之家(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇