Postgresql:使用xpath从XML列中提取数据

时间:2016-01-29 09:14:47

标签: postgresql xpath

我一直在尝试从XML中提取值,就像 @Erwin Brandstetter 使用已接受的答案回答了几次一样,但它对我不起作用:

根据this postthis post,这应该有效,但我只是得到结果:

WITH x AS ( SELECT
   '<Attributes xmlns="http://www.gis34.dk">
        <bemaerkning displayName="Bemærkning">Beatrix</bemaerkning>
        <billede displayName="Billede">https://vignette.wikia.nocookie.net/killbill/images/3/39/The_Bride.jpg</billede>
    </Attributes>'::xml AS t
)

SELECT xpath('/Attributes/bemaerkning/text()', t) as comment
FROM   x

结果: (预期:{我的评论})

comment
xml[]
-------
{}

我的数据库版本:

PostgreSQL 9.1.3 on x86_64-unknown-linux-gnu, compiled by gcc-4.5.real (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2, 64-bit

有人有想法吗?

1 个答案:

答案 0 :(得分:4)

您的XML定义了命名空间,并且该命名空间必须在xpath表达式中使用。

SELECT xpath('/g:Attributes/g:bemaerkning/text()', t, array[array['g','http://www.gis34.dk']]) as comment
FROM   x

注意passes a two-dimensional array of namespace mappings的第三个参数。

xpath()函数返回一个元素数组。如果你知道你只得到一个元素(或者只想要第一个元素),你只需要返回数组的第一个元素:

SELECT (xpath('/g:Attributes/g:bemaerkning/text()', t, array[array['g','http://www.gis34.dk']])[1] as comment
FROM   x

注意函数调用的括号:(xpath(...))