在PostgreSQL中使用XPath选择根元素的名称

在PostgreSQL中使用XPath选择根元素的名称,postgresql,xpath,document-root,Postgresql,Xpath,Document Root,我在PostgreSQL 9.1.3表中得到了一堆XML消息,其中有一列content,类型为XML)。它们并非都是相同的“类型”,因此我尝试使用如下查询提取根类型: SELECT xpath('name(/*)', content) FROM message; 根据的建议,对一个类似的SO问题进行修改 示例消息是: <?xml version="1.0" encoding="UTF-8"?> <WML version="6" xmlns="http://example.co

我在PostgreSQL 9.1.3表中得到了一堆XML消息,其中有一列
content
,类型为XML)。它们并非都是相同的“类型”,因此我尝试使用如下查询提取根类型:

SELECT xpath('name(/*)', content) FROM message;
根据的建议,对一个类似的SO问题进行修改

示例消息是:

<?xml version="1.0" encoding="UTF-8"?>
<WML version="6" xmlns="http://example.com/schemas/WML">...</WML>

...
对于这种情况,我希望得到结果“{WML}”。不幸的是,它只返回一个空数组。将namespaces参数添加到xpath,或从消息中删除名称空间,都没有帮助

关于PostgreSQL邮件列表的讨论似乎与PostgreSQL中的XPath处理有关。然而,那是在2008年,查看一下PostgreSQL源代码,就会发现这段代码是在2009年编写的。我不是PostgreSQL的开发人员,所以我不确定这个bug是否是我的问题的一个因素


但我想知道是否有一个变通方法,比如一个替代的XPath表达式可以工作?我不想求助于正则表达式来解析XML,不过如果你能建议一个简短、有力、健壮的RE,那总比什么都没有好。

显然,截至2011年6月,这个问题还没有得到解决。

我发现它准确地描述了您的问题。

显然,截至2011年6月,这一问题尚未得到解决。

我发现它准确地描述了您的问题。

我不知道旧版本的解决方法,但这在PostgreSQL 9.2中得到了修复,所以这很好


(最有可能的解决方法可能是编写一个手动解析XML的函数,但我很高兴现在不必求助于此!)

我不知道有哪种解决方法适用于旧版本,但这在PostgreSQL 9.2中得到了修复,所以这很好

(最有可能的解决方法可能是编写一个手动解析XML的函数,但我很高兴现在不必求助于此!)