Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Re: BUG #4024: xpath() results lose namespace mappings


  • From: Bruce Momjian <bruce(at)momjian(dot)us>
  • To: Matt Magoffin <postgresql(dot)org(at)msqr(dot)us>
  • Cc: pgsql-bugs(at)postgresql(dot)org
  • Subject: Re: BUG #4024: xpath() results lose namespace mappings
  • Date: Wed, 7 May 2008 10:42:55 -0400 (EDT)
  • Message-id: <200805071442(dot)m47Egtx18398(at)momjian(dot)us>

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(dot)org(at)msqr(dot)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(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs

-- 
  Bruce Momjian  <bruce(at)momjian(dot)us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +



Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group