Xmlpoke in Nant-見つかった文字列のすべてのインスタンスを更新する方法

StackOverflow https://stackoverflow.com/questions/2774353

  •  03-10-2019
  •  | 
  •  

質問

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

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

この例は次のようになります:

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

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

これは可能ですか?

役に立ちましたか?

解決

ここでQuick'n Dirty Scriptでいます。

各ファイルに接続ストリング要素が1つしかないと確信している場合は、の組み合わせでこれを達成できます xmlpeekxmlpoke. 。文字列の変更は、いくつかの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>

他のヒント

Xpathはノードのみを選択し、ノードを変更できません.

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top