2014-04-01 42 views
5

Bu sorun yakın zamanda ortaya çıktı. Eons için karınca kullanıyorum ve bu sorunu çözebileceğimi biliyorum ama sormayı düşündüm: karınca bu kullanım için zarif bir çözüm sunuyor mu?Ant: "filtreleme" ile xml dosyalarını kopyalarken özellik değerlerini xml-kaçışı nasıl verilir

Sorun otomatik işaretleri (ve diğer xml 'özel karakterler') kaçış hale nasıl

ben "filtreleme" özelliğini kullanarak xml dosyaları kopyalamak ve "değerleri doldurmak" için karınca kullanmak?

Bağlam

montajcılar/uygulayıcılar el düzenlemek bütün çeşitli uygulama sunucusu için yapılandırma dosyaları tercih etmek yerine, onları bizim uygulamanın kök dizininde bir 'build.properties' dosyaları düzenlemek var.

JDBC_PASSWORD=smith&wesson 

2) "Kaynak: Ant kopya özelliklerinden değerleri doldurma iken bir 'hedef' dizinine dosyanın önceden yapılandırılmış 'kaynak' versiyonu

1) Build.properties bu değere sahiptir dosyaları 'filtreleme' özelliğini kullanarak)

<local-tx-datasource> 
    ... 
    <password>@[email protected]</password> 
    ... 
    </local-tx-datasource> 

3) Ant kopya 'kaynak' yapılandırma dizinden xml dosya ve diğerleri özellikleri arasında 'JDBC_PASSWORD' (doldurur: "yapılandırma dosyası bu eleman vardır

<copy todir="${appserver.home.dir}" filtering="yes"> 
    <fileset dir="${appserver.conf.dir}"> 
     <include name="**/*.xml"/> 
    </fileset> 
</copy> 

4) Özelliğin bir işareti varsa, sonuçta oluşan 'hedef' xml dosyası geçersizdir. ('&' '& amp;' olmalıdır)

<local-tx-datasource> 
    ... 
    <password>smith&wesson</password> 
    ... 
    </local-tx-datasource> 

İstenilen Sonucu

yerine 4, bu istiyorum:

<local-tx-datasource> 
    ... 
    <password>smith&amp;wesson</password> 
    ... 
    </local-tx-datasource> 

Ek

Tüm 'karakter cast' hakkında endişelenmem gerek ters ', yani, daha büyük, daha büyük, vs., ve ampersan.

+0

Aynı problem var. Seninkini nasıl çözdün? Özel bir kodlayıcı yazdın mı? Teşekkürler. –

cevap

0
JDBC_PASSWORD=smith&amp;wesson 

sonuçlanacaktır önceden

Teşekkür:

<local-tx-datasource> 
    <password>smith&wesson</password> 
</local-tx-datasource> 


JDBC_PASSWORD=smith&amp;amp;wesson 
:

<local-tx-datasource> 
    <password>smith&amp;wesson</password> 
</local-tx-datasource> 

olarak ayrıştırılır alacak

neden olacaktır:

<local-tx-datasource> 
    <password>smith&amp;amp;wesson</password> 
</local-tx-datasource> 

ayrıştırılır alacak şekilde:

<local-tx-datasource> 
    <password>smith&amp;wesson</password> 
</local-tx-datasource> 

Benzer:

less-than : &lt;

greater-than : &gt;

0

Ant-Katkı görevi URLEncode kullanabilirsiniz (Evet, rotada Foreach diyor, ama bu sadece ısı iz atmak için bu.).

Bu, <filterset/> aracılığıyla geçirdiğiniz değerlerin bir tokenized XML dosyasına doğru şekilde biçimlendirildiğinden emin olmak için bunu kullanabilirsiniz.

Karınca Önleyici görevler için bir <taskdef/> tanımlamanız ve Ant Katkısı kavanozunu dahil etmeniz gerekir.

+0

URL kodlaması XML kodlamasından farklıdır. Bu doğru yön, bir özel kodlayıcıya ihtiyaç duyacağına inanıyorum. – user331465

0

Bir özellik değerini değiştirmiyorsanız, bunun yerine her zaman bir CDATA bölümünü kullanabilirsiniz. CDATA içerisindeki ampersan, daha az vb. Varlıkların kaçması gerekmez.

<local-tx-datasource> 
    ... 
    <password><![CDATA[@[email protected]]]></password> 
    ... 
</local-tx-datasource> 
İlgili konular