как извлечь значение из xml-документа в postgresql

#sql #xml #postgresql #xml-parsing

#sql #xml #postgresql #xml-синтаксический анализ

Вопрос:

Как извлечь значение clientid из следующего XML-документа в Postgres?

Я хочу получить значение 1435 из этого 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;
  

Я пытался:

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

Но это не работает.

Кроме того, как извлечь ENvalues из этого?

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

Ответ №1:

Используйте @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)