The following bug has been logged online: Bug reference: 4206 Logged by: Martin Drescher Email address: [EMAIL PROTECTED] PostgreSQL version: 8.3.1 Operating system: Windows XP SP2 Description: function xpath gives wrong results Details:
To demonstrate I use the following simple XML. <?xml version="1.0"?> <elem1> <elem2>one</elem2> <elem2>two</elem2> <elem2>three</elem2> <elem3 att="2"/> </elem1> I executed the following query in psql (with the corresponding XPath). select xpath('//text()',xmlparse(document '<?xml version="1.0" ?><elem1><elem2>one</elem2><elem2>two</elem2><elem2>three</elem2><elem3 att="2"/></elem1>')); The expected result is checked using Altova XMLSpy 2008. XPath: (//text())[1] Expected result: {one} Actual Result: ERROR: XX000: invalid XPath expression DETAIL: Invalid expression CONTEXT: SQL function "xpath" statement 1 LOCATION: xml_ereport, .\src\backend\utils\adt\xml.c:1351 XPath: boolean(/elem1) Expected result: {true} Actual Result: ERROR: XX000: invalid XPath expression DETAIL: Invalid expression CONTEXT: SQL function "xpath" statement 1 LOCATION: xml_ereport, .\src\backend\utils\adt\xml.c:1351 XPath: /elem1/.. Expected result: document root Actual Result: {"<x> <elem1> <elem2>one</elem2> <elem2>two</elem2> <elem2>three</elem2> <elem3 att=\"2\"/> </elem1> </x>"} Note: This XPath returns the document root. I donât know, how you choose to represent it. However, it should not return the element <x> The problem imo is in .\src\backend\utils\adt\xml.c:3294, where a <x>-element is wrapped around the xml and the XPath-expression is prepended by "/x". This is not needed for XML documents and fragments consisting of a single root. Instead it breaks many XPath-Expressions; like where you use multiple absolute path expressions or function calls. I think, queries on a fragment consisting of multiple roots are not possible with XPath 1.0. -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs