sigh.. I got curious. :P On Feb 27, 2009, at 7:19 PM, James Pye wrote:
Well, that or force the user to call it explicitly.
Attached is the patch that I used to get the results below..This is just a proof of concept, so it's quite lacking. Notably, it doesn't even try to identify well-formed documents.
Purpose/idea being, give the user access to the poorly-formed document as a node-set via the "fragment" function instead of mangling the xpath and xml:
postgres=# SELECT xpath('fragment()//*', 'bleh<foo/><bar/>'::xml); xpath ------- {} (1 row)postgres=# SELECT xpath('fragment()//*', 'bleh<meh><sub/></meh><foo/ ><bar/>'::xml);
xpath ---------- {<sub/>} (1 row)postgres=# SELECT xpath('fragment()/*', 'bleh<meh><sub/></meh><foo/ ><bar/>'::xml);
xpath ---------- {<sub/>} (1 row)postgres=# SELECT xpath('fragment()', 'bleh<meh><sub/></meh><foo/><bar/ >'::xml);
xpath ------------------------ {bleh,"<meh> <sub/> </meh>",<foo/>,<bar/>} (1 row) postgres=# SELECT xpath('/*', 'bleh<meh><sub/></meh><foo/><bar/>'::xml); xpath ------- {} (1 row) postgres=# SELECT xpath('fragment()[local-name()="foo"]/@att', 'bleh<meh><sub/></meh><foo att="sometin"/><bar/>'::xml); xpath ----------- {sometin} (1 row) postgres=# SELECT xpath('fragment()[local-name()="meh"]/*', 'bleh<meh><sub/></meh><foo att="sometin"/><bar/>'::xml); xpath ---------- {<sub/>} (1 row)postgres=# SELECT xpath('fragment()[local-name()="meh" or local- name()="bar"]', 'bleh<meh><sub/></meh><foo att="sometin"/><bar/>'::xml);
xpath ----------------- {"<meh> <sub/> </meh>",<bar/>} (1 row) postgres=# SELECT xpath('fragment()[local-name()="bar"]', 'bleh<meh><sub/></meh><foo att="sometin"/><bar/>'::xml); xpath ---------- {<bar/>} (1 row) postgres=# SELECT xpath('fragment()[...@*]', 'bleh<meh><sub/></meh>othertext<foo att="sometin"/><bar/>'::xml); xpath ---------------------------- {"<foo att=\"sometin\"/>"} (1 row)Can't say that I've ever been thrilled with using node-sets, but *shrug*.
I'm sleepy now..
git.diff
Description: Binary data
xmlc_file.diff
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers