On Mon, Jun 28, 2010 at 08:08:53AM -0700, Mike Berrow wrote: > 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?.
Here's a PL/pgsql wrapper for it. You could create a similar wrapper for other commands. CREATE OR REPLACE FUNCTION xml_is_well_formed(in_putative_xml TEXT) STRICT /* Leave this line here if you want RETURNS NULL ON NULL INPUT behavior. */ RETURNS BOOLEAN LANGUAGE plpgsql AS $$ BEGIN PERFORM XMLPARSE(DOCUMENT(in_putative_xml)); RETURN true; EXCEPTION WHEN invalid_xml_document THEN RETURN false; END; $$; While tracking this down, I didn't see a way to get SQLSTATE or the corresponding condition name via psql. Is this an oversight? A bug, perhaps? Cheers, David. -- David Fetter <da...@fetter.org> http://fetter.org/ Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter Skype: davidfetter XMPP: david.fet...@gmail.com iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers