我使用PostgreSQL的9 ,即采用XPath的1对SQL / XML标准 cumpliance。
该查询确定,返回预期的数据:
SELECT xpath('//img',xhtm) FROM t
但是这另外一个,算IMG元素,返回空(!),
SELECT xpath('count(//img)',xhtm) FROM t
注 1:一个xhtm
字段内容样品,
<html><p>Hello! <img src="1.png"/></p><img src="2.jpg"/></html>
注 2:当然array_length(xpath('//img',xhtm),1)
显示的计数结果,但它不是一个的XPath计数。
注 3:我不知道,如果它是一个通用的SQL / XML特点,或PosgreSQL服务器9.0.5特定的错误/问题。
编辑 :正如我在下面的评论中指出,并在表示这个SO答案 ,这个问题显然是在PostgreSQL 9.2解决。 这个问题的答案状态:
在PostgreSQL 9.2文档突然有一个以上的文章涵盖了XPath函数:
如果XPath表达式返回标值,而不是一个节点集,则返回一个单元素数组。
正是我所需要的! 因此,相对于其他问题的有效答案是:升级到PostgreSQL 9.2。
下面是我原来的答复的其余部分:
这似乎是在PostgreSQL的一个已知的限制xpath()
函数-只计算结果为表达式节点集返回任何东西; XPath表达式会返回一个标值只返回一个空数组。
一些谷歌搜索揭示一些这方面的讨论,大约2年前,主要由一个名为弗洛里安Pflug酒店负责人:
http://postgresql.1045698.n5.nabble.com/PATCH-Bug-in-XPATH-if-expression-returns-a-scalar-value-td4440233.html
他开发了据称修复问题的修补程序和附加到以下螺纹的(虽然我不能完全肯定这是最新的版本):
http://www.postgresql.org/message-id/FC60A4F5-5560-438C-97E8-B6D1FDE1CC2B@phlo.org
这里似乎是他的补丁的利弊进行一些讨论,所以我建议,通过这些线程读取需要注意的是什么参与:
http://www.postgresql.org/message-id/201106291957.04251.rsmogura@softperience.eu http://www.postgresql.org/message-id/201106291934.23089.rsmogura@softperience.eu
JLRishe让我知道你的问题。 我曾在五月同样的问题,去年,我发现这个问题是固定的PostgreSQL 9.2。
由于9.2版本。 该文件规定:
如果XPath表达式返回标值,而不是一个节点集,则返回一个单元素数组。
我刚刚下载的PostgreSQL 9.2和跑你的例子:
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------------
PostgreSQL 9.2.3 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52), 64-bit
(1 row)
postgres=# SELECT xpath('count(//img)','<html><p>Hello! <img src="1.png"/></p><img src="2.jpg"/></html>'::xml);
xpath
-------
{2}
(1 row)