sql - postgresqlでxmlドキュメントから値を抽出する方法

okwaves2024-01-25  8

Postgres で次の XML ドキュメントから clientid の値を抽出するにはどうすればよいですか?

この XML から値 1435 を取得したいです:

CREATE TABLE xmltest3(xtxt xml);
INSERT INTO xmltest3 values ('<clients><client clientId="1435"/></clients>');
SELECT unnest(xpath('./client /text()', xtxt::xml))::text AS XMLDATA FROM XMLTEST3;

試してみました:

SELECT unnest(xpath('./clients/text()', xtxt::xml))::text AS XMLDATA 
FROM XMLTEST3;

しかし、うまくいきません。

また、これから EN 値を抽出するにはどうすればよいですか?

<ENList><EN ENValue="Liquidity"/><EN ENValue="Treasury"/></ENList>


------------------------

@clientId を使用して属性値を取得します。

with invar as (
  select '<clients><client clientId="1435"/></clients>'::xml as x
) 

select unnest(xpath('/clients/client/@clientId', x))
  from invar;
 unnest 
--------
 1435
(1 row)

他の例でも概念は同じです。

with invar as (
  select '<ENList><EN ENValue="Liquidity"/><EN ENValue="Treasury"/></ENList>'::xml as x
) 
select unnest(xpath('/ENList/EN/@ENValue', x))
  from invar;

  unnest   
-----------
 Liquidity
 Treasury
(2 rows)

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。