【问题标题】:ORA-31011: XML parsing failed - invalid characters (oracle sql)ORA-31011: XML 解析失败 - 无效字符 (oracle sql)
【发布时间】:2017-03-22 10:38:15
【问题描述】:

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

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

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

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

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

或者是否有其他解决方案。

先谢谢各位了

【问题讨论】:

    标签: sql xml oracle parsing oracle11g


    【解决方案1】:

    您是否考虑过只保留您想要的字符?我不知道它们是什么,但是像这样的

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

    【讨论】:

    • 嗨,这确实有效,你能解释一下上面的 Gordon Linoff 是做什么的吗?
    • 正则表达式查找任何不是数字、字符或空格、逗号、句点或感叹号的字符。
    【解决方案2】:

    XML 中唯一的非法字符是&amp;、&lt; 和&gt;(以及属性中的" 或')。

    您可以使用 Oracle 函数转义此类字符

    例子:

    select DBMS_XMLGEN.CONVERT(title) from ...
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多