2013-05-15 24 views
5

PG sürüm 9.2'de olduğu gibi > işaretini nasıl görüntülerim? > olarak gösterilmesini istemiyorum.Postgre sürümünde ">" karakterinden nasıl kurtulur 9.2

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

Sonucu sürümü 9.1 postgreSQL içinde

Sorgu:

{"> 3"} -- desired result 

sürümü 9.2.3 sonuç:

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

herhangi işaretçiler lütfen?

Çok teşekkürler! Eğer CREATE LANGUAGE plpythonu;, daha sonra aşağıdakileri yapabilirsiniz eğer

+0

Kendisi libxml gibi görünüyor, bu dönüşümü yapıyor; Ne demek istediğimi görmek için girişi xmllint'e beslemeyi deneyin. Neyse ki firar edilmemiş firar '' 'zaten iyi hukuki olarak biçimlendirilmiş bir XML idi. '--noent' 'xmllint' 'e geçmek herhangi bir etkiye sahip değildir, çıkışta hala kaçmıştır. –

+1

Postgres 9.1'in geçersiz XML'yi ayrıştırmayı kabul ettiğine şaşırdım ... İstediğiniz sonuç sadece yanlıştır. ** ** kaçmalı. –

+0

Anladım .. Nasıl yardımcı olabilirim, nasıl kaçacağım? Çok teşekkürler ! – user2383959

cevap

2

Eh,:

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

, sorgu olabilir:

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

Sen den eleman seçmek için indeksleme eklemem gerekiyor xpath dizi sonucu ve concat xml'den string veri türüne dönüştürmektir.

Ayrıca unescape işlevini doğrudan uygulayabilirsiniz - ancak sonuç dizesi formatlanmış xml dizisidir.

İlgili konular