XML 解析是一个 PHP 扩展,允许我们轻松作和获取 XML 数据。
PHP 提供了许多使用 XML(可扩展标记语言)的选项,XML 是 Internet 上结构化文档交换的常用数据格式。万维网联盟 (W3C) 开发了 XML 作为简化结构化数据交换和传输的标准。
PHP 包括一个扩展,用于使用 James Clark 的 expat 库解析 XML 文件。此扩展使开发人员能够轻松解析 XML 文档,但它不提供验证。
PHP 支持三种用于 XML 解析的字符编码:US-ASCII、ISO-8859-1 和 UTF-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 |