我在 PostgreSQL 9.1.3 表中有一堆 XML 消息,其中有一列content
类型为 XML)。它们并非都是相同的“类型”,所以我尝试使用这样的查询来提取根类型:
SELECT xpath('name(/*)', content) FROM message;
正如this answer to a similar SO question所建议的那样。
示例消息是:
<?xml version="1.0" encoding="UTF-8"?>
<WML version="6" xmlns="http://example.com/schemas/WML">...</WML>
对于这种情况,我希望得到结果“{WML}”。不幸的是,它只返回一个空数组。将命名空间参数添加到xpath
消息中或从消息中删除命名空间都没有帮助。
关于 PostgreSQL 邮件列表的讨论似乎将其解释为PostgreSQL 中 XPath 处理中的一个错误。然而那是在 2008 年,查看 PostgreSQL 源代码显示,这段代码在 2009年发生了变化。我不是 PostgreSQL 开发人员,所以我不确定这个错误是不是我的情况的一个因素。
但我想知道是否有解决方法,例如可能有效的替代 XPath 表达式?我宁愿不必求助于正则表达式来解析 XML,但如果你能建议一个简短、有力、健壮的 RE,那么它总比没有好。