Hello.

I've read the documentation, I think I have even found the article
after which this part of documentation has been updated
(http://markmail.org/thread/ys2a2yph5zgmnls5) but I still can't write
appropriate query :-(.

Let's consider the following:


create table test_xml (id serial primary key, xml text);

insert into test_xml (xml) values ('<?xml version="1.0" encoding="utf-8"?>
                                        <lev1 attr1="a">
                                                <lev2 attr2="x" attr3="y">
                                                        <lev3 attr4="3">
                                                                <lev4 
attr5="aaa"></lev4>
                                                        </lev3>
                                                </lev2>
                                                <lev2 attr2="o" attr3="u">
                                                        <lev3 attr4="7"></lev3>
                                                </lev2>
                                                <lev2 attr2="l" attr3="w">
                                                        <lev3 attr4="9">
                                                               <lev4 
attr5="bbb"></lev4>
                                                        </lev3>
                                                </lev2>
                                        </lev1>');


Please note that second /lev1/lev2/lev3 ends here and has no lev4 child node

SELECT * from xpath_table ('id',
                           'xml',
                           'test_xml',
                              $$/lev1/lev2/@attr2|$$
                           || $$/lev1/lev2/@attr3|$$
                           || $$/lev1/lev2/lev3/lev4/@attr5$$
                           ,
                           'id=1') AS (
                               id int,
                               attr2 text,
                               attr3 text,
                               attr5 text
                               ) ;

gives:

 id | attr2 | attr3 | attr5
----+-------+-------+-------
  1 | x     | y     | aaa
  1 | o     | u     | bbb
  1 | l     | w     |

I think I understand why this happens, that's because '|' in xpath
indicates a simple join and /lev1/lev2/lev3/lev4/@attr5 returns the
first matched node.

However, I'd like to have:

 id | attr2 | attr3 | attr5
----+-------+-------+-------
  1 | x     | y     | aaa
  1 | o     | u     |
  1 | l     | w     | bbb

Could you please show me the way to achieve this?

Thank you for your time

Regards,
Marcin

-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply via email to