Re: BUG #4024: xpath() results lose namespace mappings - Mailing list pgsql-bugs
From | Bruce Momjian |
---|---|
Subject | Re: BUG #4024: xpath() results lose namespace mappings |
Date | |
Msg-id | 200805071442.m47Egtx18398@momjian.us Whole thread Raw |
In response to | BUG #4024: xpath() results lose namespace mappings ("Matt Magoffin" <postgresql.org@msqr.us>) |
List | pgsql-bugs |
Would someone please respond to this bug report? --------------------------------------------------------------------------- Matt Magoffin wrote: > > The following bug has been logged online: > > Bug reference: 4024 > Logged by: Matt Magoffin > Email address: postgresql.org@msqr.us > PostgreSQL version: 8.3.0 > Operating system: OS X 10.5, Windows XP > Description: xpath() results lose namespace mappings > Details: > > I was trying to extract XML fragments within a pl/pgsql function by nested > xpath() function calls, and found that when namespaces are used in the > XML, only the first xpath() call is able to correctly use namespaces. > > First here is an example that works, when no namespaces are used: > > BEGIN; > CREATE TEMPORARY TABLE tmp_xpath_test (x xml) ON COMMIT DROP; > INSERT INTO tmp_xpath_test VALUES ( > '<foo><bar x="y">bar1</bar><bar x="y">bar2</bar></foo>'::xml); > SELECT (xpath('/foo/bar[1]', t.x))[1] FROM tmp_xpath_test t; > SELECT xpath('/bar/@x', (xpath('/foo/bar[1]', t.x))[1]) FROM > tmp_xpath_test t; > COMMIT; > > The first select is just there to show the result of the inner call to > xpath() in the second select, and the second select returns: > > SELECT xpath('/bar/@x', (xpath('/foo/bar[1]', t.x))[1]) FROM > tmp_xpath_test t; > xpath > ------- > {y} > (1 row) > > Now if I use XML with namespaces, the first SELECT works, but the second > never returns the expected results: > > BEGIN; > CREATE TEMPORARY TABLE tmp_xpath_test (x xml) ON COMMIT DROP; > INSERT INTO tmp_xpath_test VALUES ( > '<a:foo xmlns:a="a:urn"><a:bar x="y">bar1</a:bar><a:bar > x="y">bar2</a:bar></a:foo>'::xml); > SELECT (xpath('/a:foo/a:bar[1]', t.x, ARRAY[ARRAY['a','a:urn']]))[1] FROM > tmp_xpath_test t; > SELECT xpath('/a:bar/@x', (xpath('/a:foo/a:bar[1]', t.x, > ARRAY[ARRAY['a','a:urn']]))[1], > ARRAY[ARRAY['a','a:urn']]) FROM tmp_xpath_test t; > COMMIT; > > The select results are > > SELECT (xpath('/a:foo/a:bar[1]', t.x, ARRAY[ARRAY['a','a:urn']]))[1] FROM > tmp_xpath_test t; > xpath > --------------------------- > <a:bar x="y">bar1</a:bar> > (1 row) > > SELECT xpath('/a:bar/@x', (xpath('/a:foo/a:bar[1]', t.x, > ARRAY[ARRAY['a','a:urn']]))[1], > lms_kia(> ARRAY[ARRAY['a','a:urn']]) FROM tmp_xpath_test t; > xpath > ------- > {} > (1 row) > > For the second select, I expected a single XML text node containing "y", > just like from the no-namespace result. > > -- > Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-bugs -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
pgsql-bugs by date: