【问题标题】:Broken XML tag in Oracle tableOracle 表中损坏的 XML 标记
【发布时间】:2012-11-22 11:00:20
【问题描述】:

我在 Oracle 数据库的表中有一个 XML 列,但由于某种原因,我意识到 XML 标记在最后被破坏了。

<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML>
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" locati...

我能否知道是否可以在“...”不在标签中的 XML 列中搜索“...”?我想清除损坏的 XML 而不必清除整个表。

提前致谢!

【问题讨论】:

  • 是不是 xml 在语法上无效,并且您想查找所有在语法上无效的 XMLS(如果是这样,我假设您的列是 CLOB/varchar2 类型而不是 XMLType)
  • 是的,XML 列是 CLOB(出于历史原因)。

标签: xml oracle tags


【解决方案1】:

如果发现无效的 XML,您可以这样做:

SQL> desc myxml
 Name                                      Null?    Type
 ----------------------------------------- -------- --------
 XML                                                CLOB

SQL> create or replace function is_valid(xml clob) return varchar2
  2  is
  3    e_invalid exception;
  4    pragma exception_init(e_invalid, -31011);
  5    v_xml xmltype;
  6  begin
  7    v_xml := xmltype(xml);
  8    return 'Y';
  9  exception
 10    when e_invalid
 11    then
 12      return 'N';
 13  end;
 14  /

Function created.

SQL> select * from myxml;

XML
--------------------------------------------------------------------------------
<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML>
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" lo
cati..

<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML></XMLBegin>

SQL> select * from myxml where is_valid(xml) = 'N';

XML
--------------------------------------------------------------------------------
<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML>
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" lo
cati..

【讨论】:

  • 哇!对于所有从事 XML 工作的人来说,这是一篇非常不错的文章!谢谢,@DazzaL!
猜你喜欢
  • 2017-06-26
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多