我一直在尝试从XML中提取值,就像 @Erwin Brandstetter 使用已接受的答案回答了几次一样,但它对我不起作用:
根据this post和this 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
有人有想法吗?
答案 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(...))