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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top