2010-05-05 23 views
5

Merhaba Geliştirme ve diğer ortamlarım arasında bazı yapılandırma değişkenlerini değiştirmek için Nant derlememdeki Xpath'i kullanıyorum.Nant'taki xmlpoke - Bulunan tüm dizginin tüm örneklerini nasıl güncelleştirilir

Bu örnekten sözdizimi almış:

örnek şuna benzer: Ben istiyorum ne

<xmlpoke 
    file="config01/app.config" 
    xpath="/configuration/appSettings/add[@key='AppName']/@value" 
    value="TradeMonster"> 
</xmlpoke> 

benim bağlantı dizeleri arama ve tüm örneklerini bulmak için buna benzer bir şeydir " localhost \ SqlExpress "ve sadece" localhost "olarak değiştirin.

Bu mümkün mü?

cevap

4

....

Eğer xmlpeek ve xmlpoke kombinasyonu ile gerçekleştirebilirsiniz dosyası her birinde sadece bir ConnectionString unsuru olduğundan eminseniz.

<script language="C#" prefix="custom" > 
     <code> 
     <![CDATA[ 
      [Function("fix")] 
      public static string Fix(string input) { 
       return Regex.Replace(input, @"localhost\\\w+", "localhost"); 
      } 
     ]]> 
     </code> 
    </script> 

<!-- Get the existing connection string --> 
<xmlpeek 
    file="config01/app.config" 
    xpath="/configuration/connectionStrings/add[@contains(@connectionString,'localhost\')]/@connectionString" 
    property="connectionstring"> 
</xmlpeek> 

<!-- Write back the modified connection string --> 
<xmlpoke 
    file="config01/app.config" 
    xpath="/configuration/connectionStrings/add[@contains(@connectionString,'localhost\')]/@connectionString" 
    value="${custom::fix(connectionstring)}"> 
</xmlpoke> 
+0

Teşekkürler Peter - harika çözüm! – Remotec

+0

Bu gerçekten yardımcı oldu. –

0

XPath yalnızca düğümleri seçer, düğümleri değiştiremez.

Gerekli değişiklikleri gerçekleştirmenin bir yolu, XML belgesinde bir XSLT dönüşümü gerçekleştirmektir.

Bunu yapmak için, XML belgesini sağlamanız ve tam olarak hangi metin düğümlerinin değiştirileceğini belirtmeniz gerekir. Burada bir quick'n kirli senaryo ile oynuyor

+0

XPath sadece düğümleri seçer, ancak xmlpoke (NAnt fonksiyonu) XPath tarafından seçilen düğüm değiştirir: daha kolay nedenle regex arama yapmak ve değiştirmek için bir komut dosyası görev kullanarak, bazı C# ile yapılır dize edilir değiştirme. Xmlpoke, sorunun ne olduğuyla ilgili. – azheglov

+0

@azheglov: Bu soru "xpath" olarak etiketlendi. Hatta "değiştirmeye XPath kullanıyorum ..." yanlıştır. OP, XPath ifadelerinin "bağlantı dizgilerini aramasını" istiyor ancak XPath ifadelerinin uygulanacağı XML belgesini sağlamaz - bu nedenle bu eksik bir sorudur. Cevabımda ifade ettiğim her şey bu. –