XMLPoke в NANT - Как обновить все экземпляры найденного строки

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

  •  03-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

То, что я хотел бы, это что-то похожее на это искать мои соединительные строки и найти все случаи «localhost Sqlexpress» и просто изменить их на «localhost»

Это возможно?

Это было полезно?

Решение

ИГРАЯ С Quick'n Грязным сценарием здесь ....

Если вы уверены, что в каждом файле есть только один элемент ConnectionStringStringString, вы можете выполнить это с помощью комбинации xmlpeek а также xmlpoke. Отказ Изменение строки легче выполнена с некотором C #, поэтому используя задачу сценариев для выполнения поиска REGEX и заменить:

 <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 только выбирает узлы, он не может изменить узлы.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top