xmlpoke в Nant - как обновить все найденные строки - PullRequest
5 голосов
/ 05 мая 2010

Привет! Я использую Xpath в своем скрипте сборки Nant, чтобы изменить некоторые переменные конфигурации между разработкой и другими моими средами.

Я взял синтаксис из этого примера:

Пример выглядит так:

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

То, что я хотел бы, это что-то вроде этого, чтобы искать в моих строках подключения и находить все экземпляры "localhost \ SqlExpress" и просто менять их на просто "localhost"

Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 05 мая 2010

Игра с быстрым и грязным сценарием здесь ...

Если вы уверены, что в каждом файле есть только один элемент строки соединения, вы можете сделать это с помощью комбинации 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>
0 голосов
/ 05 мая 2010

XPath выбирает только узлы, но не может менять узлы .

Один из способов внести необходимые изменения - выполнить XSLT-преобразование в документе XML.

Чтобы это произошло, вы должны предоставить XML-документ и точно указать, какие из его текстовых узлов должны быть изменены.

...