2013-05-15 12 views
5

>の符号表示をPG版9.2と同じようにするにはどうすればよいですか? >と表示したくありません。ポストグル版9.2でエスケープする方法

SELECT 
XPATH ('/BehaviorReportingRanges/BehaviorReportingRange/Range/text()', 
xmlparse(content 
'<BehaviorReportingRanges> 
    <BehaviorReportingRange> 
    <Range>> 3</Range> 
    </BehaviorReportingRange> 
</BehaviorReportingRanges>')) 

結果、バージョン9.1でPostgreSQLの

問合せ:

{"> 3"} -- desired result 

バージョン9.2.3での結果:

"{"&gt; 3"}" -- not desired result 

任意のポインタをしてください?

ありがとうございます!

+0

libxmlのように見えます。入力を 'xmllint'に入力して、どういう意味なのか見てみてください。とにかく、エスケープされていない後続の '> 'は正当な正式なXMLだとは思っていませんでした。 '--noent'を' xmllint'に渡しても何の効果もありませんが、まだ出力でエスケープされています。 –

+1

私はPostgres 9.1が無効なXMLを解析するのを受け入れることに驚いています...あなたの望む結果は単に間違っています。それは避けなければならない**。 –

+0

私は参照してください..あなたはまた助けてくれますか?私はそれをエスケープする方法?どうもありがとう ! – user2383959

答えて

2

さて、あなた CREATE LANGUAGE plpythonu;場合、あなたは次のことが可能です。

create or replace function unescape(x varchar) 
    returns varchar language plpythonu as $$ 
from xml.sax.saxutils import unescape 
return unescape(x) 
$$; 

その後、クエリになることができます。

SELECT unescape(concat((
XPATH ('/BehaviorReportingRanges/BehaviorReportingRange/Range/text()', 
xmlparse(content 
'<BehaviorReportingRanges> 
    <BehaviorReportingRange> 
    <Range>> 3</Range> 
    </BehaviorReportingRange> 
</BehaviorReportingRanges>')))[1] 
)); 

あなたがから要素を選択するために、インデックスを追加する必要がありますxpathの配列結果、およびconcatはxmlからstringデータ型に変換されます。

エスケープ機能を直接適用することもできますが、結果の文字列はフォーマットされたxml配列です。

関連する問題