2

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を提案できれば、何もないよりはましです。

4

2 に答える 2

0

古いバージョンの回避策はわかりませんが、これはPostgreSQL 9.2で修正されているので、すばらしいです。

(最も可能性の高い回避策は、XMLを手動で解析する関数を作成することでしたが、今はそれに頼る必要がないことを嬉しく思います!)

于 2012-09-13T23:29:02.293 に答える
0

明らかに、これは 2011 年 6 月の時点ではまだ解決されていません。問題を正確に説明しているこのスレッド
を見つけました。pgsql-hackers

于 2012-04-24T02:00:27.460 に答える