检查字符串是否是格式良好的xml

use*_*115 3 xml sql oracle

我在DB中有varchar2列.此列以xml格式存储字符串.但并非所有字符串都是格式良好的xml(有些是错误的).我如何检查这个字符串是否格式良好的xml?

如果这个字符串没有很好地形成xml,那么像这样的sql-query将在运行时失败:

   select 
       extractvalue(xmltype(some_table.value), 'Attachment/@category')
   from some_table
Run Code Online (Sandbox Code Playgroud)

Xml具有以下格式:

   <Attachment {attributes} />
Run Code Online (Sandbox Code Playgroud)

每个字符串中的属性数可以不同.

所以当像'asdf'这样的字符串出现时,我的查询就不会失败.

Joa*_*son 7

这是一个简单的功能,将为您检查;

CREATE OR REPLACE FUNCTION isXML(xml CLOB)
RETURN NUMBER
AS
  xmldata XMLTYPE;
BEGIN
  xmldata := XMLTYPE(xml);
  return 1;
EXCEPTION
  when others then
    return 0;
END;
/
Run Code Online (Sandbox Code Playgroud)

你可以用它;

SQL> SELECT isXML('fdjkasksdf') FROM DUAL;

ISXML('FDJKASKSDF')
-------------------
                  0

SQL> SELECT isXML('<body></body>') FROM DUAL;

ISXML('<BODY></BODY>')
----------------------
                     1    
Run Code Online (Sandbox Code Playgroud)