我在PostgreSQL 9.1.3表中有一堆XML消息,其中有一個類型爲XML的列content
)。他們不都是一樣的「類型」,所以我想用這樣的查詢,提取根型:在PostgreSQL中使用XPath選擇根元素的名稱
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郵件列表的討論似乎在PostgreSQL的XPath處理中有explain it as a bug。然而,這是在2008年,看看PostgreSQL的源代碼在2009年顯示了一段代碼was changed。我不是PostgreSQL開發人員,所以我不確定這個bug是否是我的情況中的一個因素。
但我想知道是否有解決方法,例如可能工作的替代XPath表達式?我不想訴諸正則表達式來解析XML,但如果你可以建議一個簡短的,強大的,強大的RE,那麼它會比沒有好。