XPath1在SQL / XML,算上元素返回空(XPath1 at SQL/XML, count

2019-09-28 05:59发布

我使用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特定的错误/问题。

Answer 1:

编辑 :正如我在下面的评论中指出,并在表示这个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



Answer 2:

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)


文章来源: XPath1 at SQL/XML, count elements returns empty