ORA-31011:XML解析失败 - 无效字符(oracle sql)

时间:2016-11-08 17:32:30

标签: sql xml oracle parsing oracle11g

我正在Oracle 11g数据库上使用SQL生成XML文档。但是我遇到了数据库字段的问题,因为标题字段包含许多字符,其中一些XML看起来是无效的,我正在尝试使用下面的语句捕获尽可能多的字符并将它们转换为NULL。

REGEXP_REPLACE (title, '’|£|&|*|@|-|>|/|<|;|\', '', 1, 0, 'i') as title

我仍然遇到解析问题所以我知道必须有更多无效的字符我错过了。我知道它在这个字段上失败了,因为当我将字段更改为字符串'Title'(如下所示)时,文档被解析并且工作正常。

REGEXP_REPLACE ('title', '’|£|&|*|@|-|>|/|<|;|\', '', 1, 0, 'i') as title

我正在使用XML版本'1.0“encoding =”UTF-8',是否有一个简单的方法可以解决这个问题,或者我必须找到失败的记录,这些记录可能来自200万条记录。标题字段包含来自世界各地的歌曲标题,我可以使用REGEXP_REPLACE获取char(32)之间的一系列字符,并且让char(255)不在此范围内的任何内容替换为NULL。

或者是另一种解决方案。

先谢谢你们

2 个答案:

答案 0 :(得分:1)

您是否考虑过仅保留您想要的角色?我不知道它们是什么,但是这样的东西

REGEXP_REPLACE('title', '[^a-zA-Z0-9 ,.!]', '', 1, 0, 'i') as title

答案 1 :(得分:0)

XML中唯一的非法字符是&<>(以及属性中的"')。

您可以使用Oracle函数

转义此类字符

示例:

select DBMS_XMLGEN.CONVERT(title) from ...

详细信息:https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_xmlgen.htm#i1013100