PostgreSQL 9.1.3テーブルにXMLタイプの列を持つ一連のXMLメッセージがありcontent
ます)。それらはすべて同じ「タイプ」ではないので、次のようなクエリを使用してルートタイプを抽出しようとしています。
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}」を取得したいと思います。残念ながら、空の配列を返すだけです。名前空間パラメーターをに追加しxpath
たり、メッセージから名前空間を削除したりしても、役に立ちません。
PostgreSQLメーリングリストに関する議論は、PostgreSQLでのXPath処理のバグとして説明しているようです。ただし、それは2008年であり、PostgreSQLソースを見ると、2009年にコードの一部が変更されたことがわかります。私はPostgreSQL開発者ではないため、バグが私の場合の要因であるかどうかはわかりません。
しかし、機能する可能性のある代替XPath式などの回避策があるかどうか疑問に思っていますか?XMLを解析するために正規表現に頼る必要はありませんが、短く、パンチの効いた、堅牢なREを提案できれば、何もないよりはましです。