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..

Attachment: git.diff
Description: Binary data

Attachment: 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

Reply via email to