If you only want to filter out those rows that don't contain a wellformed XML document, then you'll need a separate function you can use in a WHERE clause.
The function just has to build an XMLType instance from the CLOB and returns 1 if no exception is raised, or 0 otherwise.
It can be defined at schema level (allowing creation of a function-based index, if necessary) or transiently in the SQL statement itself (12c feature).
Here's an example of the latter :
SQL> create table configuration (id integer, rule_text clob);
Table created.
SQL> insert into configuration values (1, '<configuration><criteria>1234</criteria></configuration>');
1 row created.
SQL> insert into configuration values (2, '<configuration><criteria>4567</criteria></configuration> some extra information');
1 row created.
SQL>
SQL> with function XMLIsWellformed (p_xml in clob) return integer
2 is
3 l_xml xmltype;
4 begin
5 l_xml := xmltype(p_xml);
6 return 1;
7 exception
8 when others then
9 return 0;
10 end;
11 select t.id
12 , xmlcast(
13 xmlquery('/configuration/criteria' passing xmlparse(document t.rule_text) returning content)
14 as number
15 ) as val
16 from configuration t
17 where XMLIsWellformed(t.rule_text) = 1
18 /
ID VAL
---------- ----------
1 1234
Please also note the usage of XMLCAST/XMLQUERY construct to extract scalar values. You may also use XMLTABLE.
EXTRACTVALUE function is deprecated.