PostgreSQL XPath 中是否实现了 XPath sum 或 fn:sum 函数?

2024-03-03

我正在使用 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(使用前将#替换为@)

PostgreSQL XPath 中是否实现了 XPath sum 或 fn:sum 函数? 的相关文章

随机推荐