我在PostgreSQL 9.1.3表中有一堆XML消息,其中列content
的类型为XML)。它们不是完全相同的“类型”,所以我试图使用这样的查询提取根类型:
SELECT xpath('name(/*)', content) FROM message;
根据this answer对类似的SO问题的建议。
示例消息是:
<?xml version="1.0" encoding="UTF-8"?>
<WML version="6" xmlns="http://example.com/schemas/WML">...</WML>
在哪种情况下,我希望得到结果'{WML}'。不幸的是,它只返回一个空数组。将namespaces参数添加到xpath
或从消息中删除命名空间无济于事。
在PostgreSQL的XPath处理中,对PostgreSQL邮件列表的讨论似乎explain it as a bug。然而那是在2008年,看看PostgreSQL源代码在2009年显示了这段代码was changed。我不是PostgreSQL开发人员,所以我不相信这个bug是或不是我的一个因素情况下。
但是我想知道是否有解决方法,例如可能有效的替代XPath表达式?我宁愿不必使用正则表达式来解析XML,但是如果你能建议一个简短,有力,可靠的RE,那么它总比没有好。
答案 0 :(得分:0)
显然,截至2011年6月尚未解决
我发现this thread on pgsql-hackers
完全描述了您的问题。
答案 1 :(得分:0)
我不知道旧版本的解决方法,但这在PostgreSQL 9.2中得到修复,因此非常棒。
(最有可能的解决方法可能是编写一个手动解析XML的函数,但我很高兴我现在不必诉诸于此!)