我正在使用 PostgreSQL 8.4XPath(XML 函数)特征。这是文档中找到的改编示例:
SELECT xpath('/my:a/value[.>15]',
'<my:a xmlns:my="http://example.com">
<value>20</value>
<value>10</value>
<value>30</value>
</my:a>',
ARRAY[ARRAY['my', 'http://example.com']]);
这工作正常,它返回正确过滤的节点列表“值>15”健康)状况:
xpath
xml[]
---------------------------------------
"{<value>20</value>,<value>30</value>}"
但是当我尝试使用"sum"它返回一个空列表而不是标量值:
SELECT xpath('sum(/my:a/value[.>15])',
...
result:
xpath
xml[]
-----
"{}"
有什么建议么?
胡安·费雷拉
我偶然发现了同样的问题,我很高兴为该问题添加另一个答案:
在 PostgreSQL 9.2 中,文档突然多了一句涉及 xpath 函数的内容:
如果 XPath 表达式返回标量值而不是节点集,
返回一个单元素数组。
正是我需要的!因此,对于这个问题,另一个有效的答案是:升级到 PostgreSQL 9.2。在撰写本文时,9.2 版本只是测试版,但我可以确认它是有效的:
版本详情
postgres=# select version();
version
------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.2beta1 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52), 64-bit
(1 row)
解决方案演示
(这个演示是用Postgre 9.5做的,因为原来我粘贴了错误的代码)
postgres=# SELECT xpath('sum(/my:a/value[.>15])', '<my:a xmlns:my="http://example.com">
postgres'# <value>20</value>
postgres'# <value>10</value>
postgres'# <value>30</value>
postgres'# </my:a>',
postgres(# ARRAY[ARRAY['my', 'http://example.com']]);
xpath
-------
{50}
(1 row)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)