从Postgres中的xpath输出中删除花括号

cYn*_*cYn 7 xml postgresql

假设我正在使用它来解析XML

SELECT xpath('/id/text()', '<id>45687</id>'::xml);
Run Code Online (Sandbox Code Playgroud)

输出就是

xpath
-------
{45687}
Run Code Online (Sandbox Code Playgroud)

如何在没有花括号的情况下有效输出?而且通过有效,我的意思是不必像使用regexp_replace()函数

SELECT regexp_replace(xpath('/id/text()', '<id>45687</id>'::xml)::text, '[{}]', '', 'g');
Run Code Online (Sandbox Code Playgroud)

Nic*_*nes 9

xpath()不返回字符串,它返回一个xml[].花括号是数组表示法的一部分,而不是数据的一部分 - 您自己将它们与强制转换一起添加text.

对于固定大小的数组,您可以通过索引拉出元素:

SELECT (xpath('/id/text()', '<id>45687</id>'::xml))[1]
Run Code Online (Sandbox Code Playgroud)

将此推广为任意数量的元素,您可能会执行以下操作:

SELECT string_agg(x::text, ',')
FROM unnest(xpath('/id/text()', '<id>45687</id>'::xml)) u(x)
Run Code Online (Sandbox Code Playgroud)

虽然这可能不比原始版本更有效.通过字符串操作执行此操作的最简单方法可能是

SELECT btrim(xpath('/id/text()', '<id>45687</id>'::xml)::text, '{}')
Run Code Online (Sandbox Code Playgroud)