如何解析ISO银行对帐单

时间:2019-03-16 23:16:24

标签: xml postgresql xpath xml-parsing postgresql-9.1

我正在寻找一种方法,可以根据SEPA ISO XML银行对帐单创建Postgres 9.1+表,How to parse xml with optional elements

中所述的每笔交易都需要一行

下面的代码返回空值如何解决此问题,以便返回金额1.34和5.56?

create temp table t(x xml, nsa text[][]) on commit drop;
insert into t values(
    '<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02">
  <BkToCstmrStmt>
    <Stmt>
      <Ntry>
        <Amt Ccy="EUR">1.34</Amt>
      </Ntry>
      <Ntry>
        <Amt Ccy="EUR">5.56</Amt>
      </Ntry>
    </Stmt>
  </BkToCstmrStmt>
</Document> '::xml,
    ARRAY[ARRAY['ns','urn:iso:std:iso:20022:tech:xsd:camt.053.001.02']]);
    SELECT 
    (xpath('Amt/text()', x,nsa))[1]::text::numeric AS tasusumma
    FROM (
        SELECT unnest(xpath('/ns:Document/ns:BkToCstmrStmt/ns:Stmt/ns:Ntry', x,nsa)) as x,
        nsa
        FROM t
    ) Ntry

它必须从PostgreSQL 9.1.2开始工作。

0 个答案:

没有答案