xmlpoke in Nant - wie alle Instanzen gefunden Zeichenfolge aktualisieren
Frage
Hallo, ich bin mit Xpath in meinem Nant Build-Skript einige Konfigurationsvariablen zwischen Entwicklung und meinen anderen Umgebungen zu ändern.
Ich habe die Syntax von diesem Beispiel genommen:
Die Beispiel sieht wie folgt aus:
<xmlpoke
file="config01/app.config"
xpath="/configuration/appSettings/add[@key='AppName']/@value"
value="TradeMonster">
</xmlpoke>
Was würde Ich mag es, etwas ähnliches wie diese meine Verbindungszeichenfolgen suchen, und alle Instanzen von „localhost \ SqlExpress“ zu finden und sie nur ändern, nur „localhost“
Ist das möglich?
Lösung
liebäugelt mit einem Quick'n schmutzigen Skript hier ....
Wenn Sie sicher sind, dass es nur ein Element Connection in jeder Datei, die Sie dies mit einer Kombination aus xmlpeek
und xmlpoke
erreichen können. Modifizieren der Zeichenfolge einfacher wird mit einigem C # getan, damit eine Skript Aufgabe mit einer regex Suche zu tun und ersetzen:
<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>
Andere Tipps
XPath nur wählt Knoten, kann es nicht ändern Knoten .
Eine Möglichkeit, die notwendigen Veränderungen zu erreichen, ist eine XSLT-Transformation auf dem XML-Dokument auszuführen.
Um dies zu ermöglichen, müssen Sie das XML-Dokument zur Verfügung zu stellen und zu genau angeben, welche seines Textknoten geändert werden sollen.