PostgreSQL XPath 中是否实现了 XPath sum 或 fn:sum 函数?
我正在使用 PostgreSQL 8.4 XPath(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']]);
这工作正常,它返回使用 "value>15" 条件正确过滤的节点列表:
xpath
xml[]
---------------------------------------
"{<value>20</value>,<value>30</value>}"
但是当我尝试使用 "sum" 它返回一个空列表而不是标量值:
SELECT xpath('sum(/my:a/value[.>15])',
...
结果:
xpath
xml[]
-----
"{}"
有什么建议吗?
胡安·费雷拉
I'm using PostgreSQL 8.4 XPath (XML functions) feature. This is an adapted example found in docs:
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']]);
This works fine, it returns a list of nodes correctly filtered with "value>15" condition:
xpath
xml[]
---------------------------------------
"{<value>20</value>,<value>30</value>}"
But when I try to use "sum" it returns an empty list instead of a scalar value:
SELECT xpath('sum(/my:a/value[.>15])',
...
result:
xpath
xml[]
-----
"{}"
Any suggestions?
Juan Ferreyra
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我偶然发现了同样的问题,我很高兴为该问题添加另一个答案:
使用 PostgreSQL 9.2,文档突然多了一句话涵盖 xpath 函数:
正是我需要的!因此,对于这个问题,另一个有效的答案是:升级到 PostgreSQL 9.2。在撰写本文时,版本 9.2 只是测试版,但我可以确认这是否有效:
版本详细信息
解决方案演示
(此演示是使用 Postgre 9.5 进行的,因为最初我粘贴了错误的代码)
I stumbled across the same problem and I am pleased to add another answer to the question:
With PostgreSQL 9.2 the documentation suddenly has one more sentence covering the xpath function:
Just what I need! So in relation to the question another valid answer is: Upgrade to PostgreSQL 9.2. In the moment of writing this, version 9.2 is just a beta, but I can confirm that this works:
Version details
Demonstration of solution
(This demonstration was made with Postgre 9.5, because originally I pasted the wrong code)
xpath
不会创建新节点,它只会过滤当前存在的节点。这就是XSLT
的用途。来自文档:
由于您的 XPath 表达式不返回节点集,因此其中没有值,也没有任何可返回的内容。
xpath
does not create new nodes, it only filters the currently existing ones. That's whatXSLT
is for.From the docs:
Since your XPath expression does not return a node set, there are not values in it and there is nothing to return.