无效的 XML 字符错误 - 如何从 VARCHAR2 数据库列中查找无效字符?

Posted

技术标签:

【中文标题】无效的 XML 字符错误 - 如何从 VARCHAR2 数据库列中查找无效字符?【英文标题】:Invalid XML character Error - How to find the invalid character from a VARCHAR2 database column? 【发布时间】:2021-09-15 06:26:29 【问题描述】:

这里是 Oracle 新手。

对于打印到报表上的 XML 数据,我收到此错误“字符引用“”是无效的 XML 字符”。 导致问题的 XML 数据来自数据库中的 VARCHAR2 数据列。 我已经过滤掉了该列,现在我想通过记录来找到这个无效字符在哪个记录中,并编写一个更新语句,用一个有效字符替换无效字符。 我不知道该怎么做。 有没有我可以用 SELECT 语句为此编写的正则表达式? 有人可以帮我吗?

谢谢!

【问题讨论】:

where your_column like unistr('%\dbc0%') 是否找到违规行? 嗨,Alex,不,这不会获取任何结果... 【参考方案1】:

要确定哪些条目具有您要消除的字符,您可以在列中搜索该字符

select colname 
  from tabname 
 where instr(colname,chr(56256)) > 0;

你可以用更新语句替换:

update tablname
   set colname = replace(colname,chr(56256),'replacementstring')
 where instr(colname,chr(56256)) > 0;

【讨论】:

嗨 Niall,select 语句不返回任何结果...我将列值的备份作为单独的表并尝试使用 SET text = REPLACE(text, CHR( 56256)) ,然后它说所有行都已更新,而不是零。我现在很困惑。 如果您不使用 where 语句,它会更新所有行 - 即使这会使行保持不变。尝试使用 ascii() 函数逐个字符地查看错误字符串之一,以获取字符串中错误字符的确切字符代码。 嗨 Niall,仍然没有获取结果...我可以采取其他替代方法来解决这个问题吗? 在哪里可以找到坏字符的 ascii 代码,使用“尝试使用 ascii() 函数逐个字符查看坏字符串,以获取坏字符的确切字符代码在你的弦上。” ? 嗨,尼尔,是的。试过ascii()、instr()、unistr()....没有结果。

以上是关于无效的 XML 字符错误 - 如何从 VARCHAR2 数据库列中查找无效字符?的主要内容,如果未能解决你的问题,请参考以下文章

解析Xml数据错误:文本内容中发现无效字符怎么处理

我将XML发送到无效URL时如何捕获错误? (蟒蛇)

具有无效字符的java xml

如何在 VSTS 构建期间使用 OctoPack 避免 XML 文件中的无效字符?

从java中的字符串中删除无效的XML字符

C#从xml中删除无效字符[重复]