5

こんにちは、Nant ビルド スクリプトで Xpath を使用して、開発環境と他の環境の間でいくつかの構成変数を変更しています。

この例から構文を取得しました。

例は次のようになります。

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

私が望むのは、接続文字列を検索し、「localhost\SqlExpress」のすべてのインスタンスを見つけて、それらを単に「localhost」に変更するために、これに似たものです

これは可能ですか?

4

2 に答える 2

4

ここでクイック&ダーティスクリプトをいじっています....

各ファイルに接続文字列要素が 1 つしかないことが確実な場合は、 と を組み合わせてこれを実現できxmlpeekますxmlpoke。一部の C# を使用すると文字列の変更が簡単になるため、スクリプト タスクを使用して正規表現の検索と置換を行います。

 <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>
于 2010-05-05T17:59:32.277 に答える
0

XPath はノードを選択するだけで、ノードを変更することはできません

必要な変更を行う 1 つの方法は、XML ドキュメントに対して XSLT 変換を実行することです。

これを行うには、XML ドキュメントを提供し、変更するテキスト ノードを正確に指定する必要があります。

于 2010-05-05T16:20:51.750 に答える