Re: How to parse xml containing optional elements

From: Hannes Erven <hannes(at)erven(dot)at>
To: Andrus <kobruleht2(at)hot(dot)ee>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: How to parse xml containing optional elements
Date: 2016-08-11 08:51:26
Message-ID: 8bd91192-71ac-2989-55c7-bd7115f0ad79@erven.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Andrus,

> SELECT
> unnest(xpath('/ns:Document/ns:BkToCstmrStmt/ns:Stmt/ns:Ntry/ns:Amt/text()',
> x,nsa))::text::numeric AS tasusumma
> ,
> unnest(xpath('/ns:Document/ns:BkToCstmrStmt/ns:Stmt/ns:Ntry/ns:NtryDtls/ns:TxDtls/ns:Refs/ns:EndToEndId/text()',
> x,nsa))::text AS orderinr
> FROM t;

You need to extract all ns:Ntry elements first, and then get the amount
and EndToEndId for each of them:

SELECT
(xpath('ns:Amt/text()', x,nsa))[1]::text::numeric AS tasusumma,
(xpath('ns:NtryDtls/ns:TxDtls/ns:Refs/ns:EndToEndId/text()', x,nsa))[1]
AS orderinr

FROM (
SELECT unnest(xpath('/ns:Document/ns:BkToCstmrStmt/ns:Stmt/ns:Ntry',
x,nsa)) as x, nsa
FROM t
) Ntry

Best regards,

-hannes

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Andrus 2016-08-11 09:19:09 Re: How to parse xml containing optional elements
Previous Message Sridhar N Bamandlapally 2016-08-11 07:12:59 Re: RETURNS TABLE function: ERROR: column reference "word" is ambiguous