PHP - XML 解析函数


XML 解析是一个 PHP 扩展,允许我们轻松作和获取 XML 数据。

PHP 提供了许多使用 XML(可扩展标记语言)的选项,XML 是 Internet 上结构化文档交换的常用数据格式。万维网联盟 (W3C) 开发了 XML 作为简化结构化数据交换和传输的标准。

PHP 包括一个扩展,用于使用 James Clarkexpat 库解析 XML 文件。此扩展使开发人员能够轻松解析 XML 文档,但它不提供验证。

PHP 支持三种用于 XML 解析的字符编码:US-ASCIIISO-8859-1UTF-8,但不支持 UTF-16

您可以使用 PHP 的 XML 解析功能开发 XML 解析器并为特定 XML 事件(如元素的开头或结尾、字符数据等)定义唯一处理程序。可以使用一系列可编程选项来修改解析过程,这使其成为在 PHP 应用程序中管理 XML 数据的灵活选项。

安装

此扩展默认启用。编译时 disable 的默认命令行是 --disable-xml

运行时配置

此扩展没有 php.ini 定义的配置指令。

预定义常量

PHP 有一些与 XML 相关的预定义常量 -

常量 描述
XML_ERROR_NONE (int) 指示未发生错误。
XML_ERROR_NO_MEMORY (int) 指示内存分配错误。
XML_ERROR_SYNTAX (int) 指示 XML 文档中的语法错误。
XML_ERROR_NO_ELEMENTS (int) 指示文档为空或缺少根元素。
XML_ERROR_INVALID_TOKEN (int) 指示遇到无效的令牌。
XML_ERROR_UNCLOSED_TOKEN (int) 指示令牌未正确关闭。
XML_ERROR_PARTIAL_CHAR (int) 指示文档中的不完整字符。
XML_ERROR_TAG_MISMATCH (int) 指示开始和结束标记不匹配。
XML_ERROR_DUPLICATE_ATTRIBUTE (int) 指示标记中的重复属性。
XML_ERROR_JUNK_AFTER_DOC_ELEMENT (int) 指示在 root 元素之后找到的额外数据。
XML_ERROR_PARAM_ENTITY_REF (int) 指示参数实体引用存在问题。
XML_ERROR_UNDEFINED_ENTITY (int) 指示引用了未定义的实体。
XML_ERROR_RECURSIVE_ENTITY_REF (int) 指示找到递归实体引用。
XML_ERROR_ASYNC_ENTITY (int) 指示异步实体错误。
XML_ERROR_BAD_CHAR_REF (int) 指示无效的字符引用。
XML_ERROR_BINARY_ENTITY_REF (int) 指示二进制实体引用错误。
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (int) 指示属性中的外部实体引用。
XML_ERROR_MISPLACED_XML_PI (int) 指示放错位置的处理指令。
XML_ERROR_UNKNOWN_ENCODING (int) 表示遇到了未知编码。
XML_ERROR_INCORRECT_ENCODING (int) 指示指定的编码不正确。
XML_ERROR_UNCLOSED_CDATA_SECTION (int) 指示未关闭的 CDATA 节。
XML_ERROR_EXTERNAL_ENTITY_HANDLING (int) 指示处理外部实体时出错。
XML_OPTION_CASE_FOLDING (int) 指示是否启用大小写折叠。
XML_OPTION_PARSE_HUGE (int) 允许解析非常大的 XML 文档。从 PHP 8.4.0 开始可用。对于 libxml2 < 2.7.0(例如 PHP 7.x),此选项默认处于启用状态,无法禁用。
XML_OPTION_TARGET_ENCODING (int) 指定解析器的目标编码。
XML_OPTION_SKIP_TAGSTART (int) 指示在标签开头跳过的字符数。
XML_OPTION_SKIP_WHITE (int) 指示是否跳过空格。
XML_SAX_IMPL (string) 保存 SAX 实现方法。可以是 “libxml” 或 “expat”。

错误代码

以下常量是为 XML 错误代码定义的:

常量 描述
XML_ERROR_NONE (int) 指示未发生错误。
XML_ERROR_NO_MEMORY (int) 指示内存分配错误。
XML_ERROR_SYNTAX (int) 指示 XML 文档中的语法错误。
XML_ERROR_NO_ELEMENTS (int) 指示文档为空或缺少根元素。
XML_ERROR_INVALID_TOKEN (int) 指示遇到无效的令牌。
XML_ERROR_UNCLOSED_TOKEN (int) 指示令牌未正确关闭。
XML_ERROR_PARTIAL_CHAR (int) 指示文档中的不完整字符。
XML_ERROR_TAG_MISMATCH (int) 指示开始和结束标记不匹配。
XML_ERROR_DUPLICATE_ATTRIBUTE (int) 指示标记中的重复属性。
XML_ERROR_JUNK_AFTER_DOC_ELEMENT (int) 指示在 root 元素之后找到的额外数据。
XML_ERROR_PARAM_ENTITY_REF (int) 指示参数实体引用存在问题。
XML_ERROR_UNDEFINED_ENTITY (int) 指示引用了未定义的实体。
XML_ERROR_RECURSIVE_ENTITY_REF (int) 指示找到递归实体引用。
XML_ERROR_ASYNC_ENTITY (int) 指示异步实体错误。
XML_ERROR_BAD_CHAR_REF (int) 指示无效的字符引用。
XML_ERROR_BINARY_ENTITY_REF (int) 指示二进制实体引用错误。
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (int) 指示属性中的外部实体引用。
XML_ERROR_MISPLACED_XML_PI (int) 指示放错位置的处理指令。
XML_ERROR_UNKNOWN_ENCODING (int) 表示遇到了未知编码。
XML_ERROR_INCORRECT_ENCODING (int) 指示指定的编码不正确。
XML_ERROR_UNCLOSED_CDATA_SECTION (int) 指示未关闭的 CDATA 节。
XML_ERROR_EXTERNAL_ENTITY_HANDLING (int) 指示处理外部实体时出错。

函数列表

PHP − 表示支持该函数的 PHP 最早版本。

函数 描述 PHP
xml_error_string 获取 XML 解析器错误字符串 5
xml_get_current_byte_index 获取 XML 解析器的当前字节索引 4
xml_get_current_column_number 获取 XML 解析器的当前列号 4
xml_get_current_line_number 获取 XML 解析器的当前行号 4
xml_get_error_code 获取 XML 解析器错误代码 4
xml_parse 解析 XML 文档 4
xml_parse_into_struct 将任何格式化的 XML 解析为数组结构 4
xml_parser_create 创建 XML 解析器 4
xml_parser_create_ns 创建具有命名空间支持的 XML 解析器 4
xml_parser_free 释放 XML 解析器 4
xml_parser_get_option 用于从 XML 解析器获取选项 4
xml_parser_set_option 在 XML 解析器中设置选项 4
xml_set_character_data_handler 设置角色数据处理程序 4
xml_set_default_handler 设置默认处理程序 4
xml_set_element_handler 设置 start 和 end 元素处理程序 4
xml_set_end_namespace_decl_handler 设置结束命名空间声明处理程序 4
xml_set_external_entity_ref_handler 设置外部实体引用处理程序 4
xml_set_notation_decl_handler 设置符号声明处理程序 4
xml_set_object 在对象中指定 XML 解析器 4
xml_set_processing_instruction_handler 设置处理指令 (PI) 处理程序 4
xml_set_start_namespace_decl_handler 设置 start 命名空间声明处理程序 4
xml_set_unparsed_entity_decl_handler 设置未解析的实体声明处理程序 4