Oracle XMLPARSE() 函数使用指南

在 Oracle 数据库中,XMLPARSE() 是一个用于将字符串或文本表达式解析为 XMLType 数据类型实例的核心函数。在对 XML 进行 XPath 提取、模式校验或调用 XMLTABLE() 进行关系化投影之前,通常需要使用 XMLPARSE() 将原始字符串转换为可操作的 XML 树结构。


语法

Oracle XMLPARSE() 函数的标准语法如下:

XMLPARSE ( { DOCUMENT | CONTENT } value_expr [ WELLFORMED ] )

参数说明

  • DOCUMENT:指示待解析的文本必须是一个完整合法的 XML 文档(即必须有且仅有一个根元素节点,且符合 XML 1.0 规范)。如果不符合单一根节点要求,Oracle 将抛出错误。
  • CONTENT:指示待解析的文本是一个 XML 内容片段(可以包含多个同级的根节点、文本节点或空节点)。常用于解析部分 XML 标签片段。
  • value_expr:必需。要解析的输入字符串表达式,可以是 VARCHAR2、CHAR 或 CLOB 字段。
  • WELLFORMED(可选):标记该输入已知为良好构造(well-formed)的 XML,Oracle 在解析时会跳过部分昂贵的完整性深度校验,从而显著提升高并发批量处理时的解析性能。

返回值

返回一个合法的 XMLType 实例。如果 value_expr 为 NULL,则返回 NULL。


使用示例

示例 1:使用 DOCUMENT 解析完整 XML 文档

SELECT 
    XMLPARSE(DOCUMENT '<company id="10"><name>Acme Corp</name></company>' WELLFORMED) AS xml_doc
FROM dual;

如果尝试向 DOCUMENT 模式传入具有多个根节点的文本(例如 '<a>1</a><b>2</b>'),Oracle 会抛出 ORA-31011: XML parsing failed 错误。

示例 2:使用 CONTENT 解析 XML 片段

对于多个并列元素片段,使用 CONTENT 关键字:

SELECT 
    XMLPARSE(CONTENT '<tag>数据库</tag><tag>教程网</tag>') AS xml_fragment
FROM dual;

示例 3:结合 XMLTABLE 提取节点数据

XMLPARSE() 最常见的应用场景是为 XMLTABLE 或 XMLQUERY 提供合法的 XMLType 输入流:

SELECT x.tag_name
FROM XMLTABLE(
    '/tag'
    PASSING XMLPARSE(CONTENT '<tag>MySQL</tag><tag>Oracle</tag><tag>PostgreSQL</tag>')
    COLUMNS
        tag_name VARCHAR2(20) PATH '.'
) x;

常见注意事项

  1. 命名规范与特殊字符: 输入文本中的特殊字符(如 &, <, >)必须正确转义为 &amp;, &lt;, &gt;,否则将导致 XML 语法解析异常。
  2. 性能优化建议: 在明确数据来源可靠且格式严谨的 ETL 批量入库场景中,附带 WELLFORMED 关键字能够降低 CPU 解析开销。

相关 XML 函数与工具