Oracle中是否有替代XML Parser的HTML Parser解析CLOB格式HTML表格
Oracle解析HTML表格报错的解决方案
你遇到的ORA-06502/ORA-06512报错,是因为XML解析器要求输入必须为严格良构的XML文档,但普通HTML存在大量不闭合标签、无引号属性、未转义实体等不符合XML规范的语法,所以直接将HTML内容转换为XMLType会有概率失败。以下是两种可行的替代方案:
方案1:正则匹配提取(适合结构简单的规则表格)
如果你的HTML表格没有嵌套标签、td内容不含</>特殊字符,可以直接用正则匹配跳过XML解析直接提取内容,示例代码如下:
with raw_data as ( select ROW_ID, NOTE as html_content from MY_Table where EVENT='note' ), split_tr as ( select ROW_ID, level as tr_order, regexp_substr(html_content, '<tr[^>]*>(.*?)</tr>', 1, level, 'i', 1) as tr_content from raw_data connect by level <= regexp_count(html_content, '<tr[^>]*>', 1, 'i') and prior ROW_ID = ROW_ID and prior sys_guid() is not null ), extract_td as ( select ROW_ID, tr_order, regexp_substr(tr_content, '<td[^>]*>(.*?)</td>', 1, 1, 'i', 1) as first_td_content from split_tr where tr_content is not null ) select ROW_ID, listagg(first_td_content, '|') within group (order by tr_order) as Data from extract_td where first_td_content is not null group by ROW_ID;
该方案实现简单、性能高,仅适用于表格结构固定的场景。
方案2:Java存储过程封装HTML解析器(通用复杂场景)
如果HTML结构复杂、存在大量非良构语法,推荐封装开源HTML解析器为Oracle自定义函数,步骤如下:
- 下载成熟的HTML解析器jar包,使用loadjava工具将jar包上传到Oracle实例,授予对应执行权限
- 编写Java静态方法实现HTML表格解析逻辑,编译后创建PL/SQL包装函数
- 直接调用自定义函数解析CLOB类型的HTML内容即可
该方案可以兼容所有标准HTML语法,是生产环境处理复杂HTML的最优解,性能可满足绝大多数业务场景的需求。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

