Oracle表中损坏的XML标记

Oracle表中损坏的XML标记,xml,oracle,tags,Xml,Oracle,Tags,我在Oracle数据库的表中有一个XML列,出于某种原因,我意识到XML标记最后被破坏了 <XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML> <Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" locati... 我能知道是否有可能搜索。。。在XML列中,其中。。。不在标签中

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

<XMLBegin><linesandlinesofXML>blahblahblah</linesandlinesofXML>
<Framework.DesktopContent.ImageLocation ObjectName="PaneContentImageSelected" locati...
我能知道是否有可能搜索。。。在XML列中,其中。。。不在标签中吗?我希望清除损坏的XML,而不必清除整个表


提前谢谢

如果发现无效的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,可以执行以下操作:

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在语法上是无效的,并且您希望查找所有在语法上无效的xml,如果是的话,我假设您的列是CLOB/varchar2类型的,而不是XMLTypeYup类型的,XML列是CLOB,是因为历史原因吗?是因为XML在语法上是无效的,您想查找所有非语法有效的XML吗?如果是这样,我假设您的列是CLOB/varchar2类型的,而不是XMLTYPE。是的,XML列是CLOB,是因为历史原因。哇!对于所有在XML上工作的人来说,这是一篇非常好的文章!谢谢,达扎尔!哇!对于所有在XML上工作的人来说,这是一篇非常好的文章!谢谢,达扎尔!