Comment extraire la valeur de clientid du document XML suivant dans Postgres ?

Je veux obtenir la valeur 1435 de ce xml :

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;

J'ai essayé:

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

Mais ça ne marche pas.

Aussi, comment en extraire le ENvalues ?

<ENList><EN ENValue="Liquidity"/><EN ENValue="Treasury"/></ENList>
1
dp1212 4 sept. 2020 à 21:14

1 réponse

Meilleure réponse

Utilisez @clientId pour obtenir la valeur de l'attribut :

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)

Le concept est le même pour votre autre exemple :

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)

2
Mike Organek 4 sept. 2020 à 19:04