原字段为clob,
查询
SELECT XMLTYPE(字段) FROM TABLE_A
报错如下:
ORA-31011: XML 语法分析失败
ORA-19202: XML 处理
LPX-00217: invalid character 12 (U+000C)
Error at line 1559
时出错
ORA-06512: 在 "SYS.XMLTYPE", line 272
ORA-06512: 在 line 1
查看错误堆栈的程序源?
为了更好查看报错情况,直接查询clob字段。并利用二分法,通过时间,找出该条数据。
SELECT 字段 FROM TABLE_A where ID='111'
这里可以明显看出,报错字段的错误。
XML是有两个版本的,1.0和1.1,这样应该是version1.0不支持“ ”所导致(这里打出 & # x C ;直接就是箭头了,由于这个xml是页面端用到这个特殊字段, XML序列化的时候,用了version=1.1)。
XML有 version=1.0 和 version=1.1 版本。version1.0 和 version1.1 的区别在于,1.1 支持 Unicode 的后续版本,对命名使用的字符有更自由的政策,添加了一些空格符并且允许对 1.0 禁止使用的控制字符进行字符引用。
之前处理kettle导入的时候也遇到,这里尝试添加<?xml version=''1.1'' encoding="utf-8"?>
SELECT XMLTYPE('<?xml version="1.1" encoding="utf-8"?>'||字段) FROM TABLE_A
还是报错,
ORA-31011: XML 语法分析失败
ORA-19202: XML 处理
LPX-00235: invalid XML version, must be 1.0 or 2.0
Error at line 1
时出错
ORA-06512: 在 "SYS.XMLTYPE", line 272
ORA-06512: 在 line 1
查看错误堆栈的程序源?
这里居然提示version, must be 1.0 or 2.0,后面换了2.0还是不行。
最后通过去掉这个字符。后面就好了。
总结,处理XML的时候,如果遇到& # x C ;之类的字符,需要头部改成version=“1.1”。如不支持,则把特殊字符替换为空。