Обсуждение: Issue: Deprecation of the XML2 module 'xml_is_well_formed' function
We need to make extensive use of the 'xml_is_well_formed' function provided by the XML2 module.
Yet the documentation says that the xml2 module will be deprecated since "XML syntax checking and XPath queries"
is covered by the XML-related functionality based on the SQL/XML standard in the core server from PostgreSQL 8.3 onwards.
However, the core function XMLPARSE does not provide equivalent functionality since when it detects an invalid XML document,
it throws an error rather than returning a truth value (which is what we need and currently have with the 'xml_is_well_formed' function).
For example:
select xml_is_well_formed('<br></br2>');
xml_is_well_formed
--------------------
f
(1 row)
select XMLPARSE( DOCUMENT '<br></br2>' );
ERROR: invalid XML document
DETAIL: Entity: line 1: parser error : expected '>'
<br></br2>
^
Entity: line 1: parser error : Extra content at the end of the document
<br></br2>
^
Is there some way to use the new, core XML functionality to simply return a truth value
in the way that we need?.
Thanks,
-- Mike Berrow
On Mon, Jun 28, 2010 at 11:03 AM, Mike Berrow <mberrow@gmail.com> wrote: > Is there some way to use the new, core XML functionality to simply return a > truth value > in the way that we need?. Have you tried using a wrapper function like the one suggested independently by Mike Rylander and David Fetter upthread? If so, how'd it work out for you? -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise Postgres Company
Yes, I went ahead and tried the original suggestion.
Here is what the added function went in as:
CREATE OR REPLACE FUNCTION xml_is_ok(x text)
RETURNS boolean AS
$BODY$
BEGIN
PERFORM XMLPARSE( DOCUMENT x::XML );
RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
RETURN FALSE;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION xml_is_ok(text) OWNER TO postgres;
It worked fine. Thanks Mike and David.
The only other issue is that when I benchmarked it on a 5,000 record data set that I have,
the original XML2 function ('xml_is_well_formed') took about 9.5 seconds
and this (deprecation driven) replacement took about 17.2 seconds.
-- Mike Berrow
On Mon, Jun 28, 2010 at 7:51 PM, Robert Haas <robertmhaas@gmail.com> wrote:
On Mon, Jun 28, 2010 at 11:03 AM, Mike Berrow <mberrow@gmail.com> wrote:Have you tried using a wrapper function like the one suggested
> Is there some way to use the new, core XML functionality to simply return a
> truth value
> in the way that we need?.
independently by Mike Rylander and David Fetter upthread? If so,
how'd it work out for you?