oracel处理XML时,报ORA-31011、ORA-19202。

原字段为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'

oracel处理XML时,报ORA-31011、ORA-19202。_第1张图片

oracel处理XML时,报ORA-31011、ORA-19202。_第2张图片
这里可以明显看出,报错字段的错误。
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导入的时候也遇到,这里尝试添加

SELECT XMLTYPE(''||字段) 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”。如不支持,则把特殊字符替换为空。

你可能感兴趣的:(xml,java,服务器,oracle)