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

时间:2012-09-28 11:17:30

标签: sql xml oracle

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

如果此字符串形式不正确xml,则此类sql-query将在运行时失败:

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

Xml具有以下格式:

   <Attachment {attributes} />

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

因此,当'asdf'这样的字符串出现时,我的查询就不会失败。

2 个答案:

答案 0 :(得分:6)

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

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

您可以将其用作;

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

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

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

ISXML('<BODY></BODY>')
----------------------
                     1    

答案 1 :(得分:0)

Oracle SQL函数XMLIsValid和XMLType方法IsSchemaValid()
无条件运行验证过程。不记录任何验证状态。返回:

  • 1如果确定文件有效。
  • 0如果确定文件无效或无法确定文件的有效性。

XMLType方法SchemaValidate()
如果验证状态为0(默认情况下为0),则运行验证过程。如果确定文档有效,则将验证状态设置为1。 (否则,状态保持为0。)

XMLType方法 isSchemaValidated ()返回XMLType实例的记录验证状态。

XMLType方法 setSchemaValidated ()设置(记录)XMLType实例的验证状态。

检查this link以获取参考