#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)