一、概述及装置
XML(可扩大标记言语,eXtensible Markup Language) 是一种在互联网上用于结构化文档交互的数据格式。 它是互联网协会(W3C)定义的一个规范。与 XML 及其相干手艺的信息可接见http://www.ki4.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.ki4.cn/。 运用expat库中的 Makefile 是不会默许构建出库文件的,可运用以下构建划定规矩举行构建:
libexpat.a: $(OBJS) ar -rc $@ $(OBJS) ranlib $@
expat 的源代码 RPM 装置包可在 http://www.ki4.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 事宜处置惩罚器的定义以下:
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剖析器装置及概述的内容,更多相干内容请关注ki4网(www.ki4.cn)!