Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check whether string is a well-formed xml

I have varchar2 column in DB. And this column stores string in xml format. But not all strings are well-formed xml (some with mistakes). How can I check is this string well-formed xml or not?

If this string isn't well formed xml, sql-query like this will fail at runtime:

   select 
       extractvalue(xmltype(some_table.value), 'Attachment/@category')
   from some_table

Xml has following format:

   <Attachment {attributes} />

Number of attributes in each string can be different.

So when the string like 'asdf' would occur my query wouldn't fail.

like image 821
Oleksii Avatar asked Mar 01 '26 06:03

Oleksii


1 Answers

Here's a simple function that will check it for you;

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;
/

You can use it as;

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

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

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

ISXML('<BODY></BODY>')
----------------------
                     1    
like image 155
Joachim Isaksson Avatar answered Mar 03 '26 23:03

Joachim Isaksson