2012-09-28 113 views
3

我在数据库中有varchar2列。此列以xml格式存储字符串。 但并非所有的字符串都是格式良好的XML(有些错误)。 我怎样才能检查这个字符串格式良好的XML或不?检查字符串是否是格式正确的xml

如果这个字符串没有良好的XML,SQL查询这样会在运行时失败:

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

XML有以下格式:

<Attachment {attributes} /> 

每个字符串属性的数量不一样。

所以当像'asdf'这样的字符串发生时,我的查询不会失败。

回答

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  
+0

我认为这是最好的解决方案。但我不能在我的项目中创建任何功能。 所以我决定用regexp_substr函数提取数据。 – user1320115

0

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

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

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

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

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

检查this link参考

+0

当我们输入字符串为'asdf'时它不起作用; select xmlisvalid(xmltype('asdf')) from dual d; – user1320115

相关问题