xpath differences between postgres 11.4 and 10.3

Started by Felipe de Jesús Molina Bravoalmost 7 years ago3 messagesgeneral
Jump to latest
#1Felipe de Jesús Molina Bravo
fjmolinabravo@gmail.com

Hi!!

I have an strange behavior between 11.4 and 10.3 with xpath function:

With pgsql 10.3 i have:
select xpath('@idc', '<p idc="4776" rc="Cuadro" idrg="5"/>' ) ;
xpath
--------
{4776}
(1 fila)

and with pgsql 11.4:
select xpath('@idc', '<p idc="4776" rc="Cuadro" idrg="5"/>'::xml ) ;
xpath
-------
{}
(1 fila)

Now, if change the expression with "//":
select xpath('//@idc', '<p idc="4776" rc="Cuadro" idrg="5"/>'::xml ) ;
xpath
--------
{4776}
(1 fila)

In release notes for postgresql 11 say:

-

*Correctly handle relative path expressions in xmltable(), xpath(), and
other XML-handling functions (Markus Winand)*

*Per the SQL standard, relative paths start from the document node of
the XML input document, not the root node as these functions previously
did.*

Despite this note I do not undertand why it behaves differently ... or
maybe I do not understand the note well ... what do you think?

thanks in advance!

regards!

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: Felipe de Jesús Molina Bravo (#1)

On Friday, July 5, 2019, Felipe de Jesús Molina Bravo <
fjmolinabravo@gmail.com> wrote:

<p idc="4776" rc="Cuadro" idrg="5"/>'

*Per the SQL standard, relative paths start from the document node of the
XML input document, not the root node as these functions previously did.*

The absolute path to the 4776 in the document is:

/p::attribute[id]

In v10 relative pathing looks like (root element node):

/p<you-are-here>::attribute[id]

In v11 relative pathing looks like (document root node):

/<you-are-here>p::attribute[id]

You either need to specify your root element name in your xpath expression
or, less precisely, use // to look for the attribute anywhere

David J.

#3Felipe de Jesús Molina Bravo
fjmolinabravo@gmail.com
In reply to: David G. Johnston (#2)
Re: xpath differences between postgres 11.4 and 10.3

ok David I get it! now i undestand the note!!

very grateful with your answer

See you!!

El sáb., 6 jul. 2019 a las 2:29, David G. Johnston (<
david.g.johnston@gmail.com>) escribió:

Show quoted text

On Friday, July 5, 2019, Felipe de Jesús Molina Bravo <
fjmolinabravo@gmail.com> wrote:

<p idc="4776" rc="Cuadro" idrg="5"/>'

*Per the SQL standard, relative paths start from the document node of the
XML input document, not the root node as these functions previously did.*

The absolute path to the 4776 in the document is:

/p::attribute[id]

In v10 relative pathing looks like (root element node):

/p<you-are-here>::attribute[id]

In v11 relative pathing looks like (document root node):

/<you-are-here>p::attribute[id]

You either need to specify your root element name in your xpath expression
or, less precisely, use // to look for the attribute anywhere

David J.