Привет я использую Xpath в своем сценарии сборки Nant для замены некоторых переменных конфигурации между разработкой и моими другими средами.
Я взял синтаксис от этого примера:
Пример похож на это:
<xmlpoke
file="config01/app.config"
xpath="/configuration/appSettings/add[@key='AppName']/@value"
value="TradeMonster">
</xmlpoke>
То, что я хотел бы, является чем-то подобным этому, чтобы искать мои строки подключения и найти все экземпляры "localhost\SqlExpress" и просто изменить их на просто "localhost"
Действительно ли это возможно?
Игрушка с быстрым и грязным сценарием здесь....
Если вы уверены, что в каждом файле есть только один элемент connectionstring, вы можете сделать это с помощью комбинации 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-документ и точно указать, какие из его текстовых узлов должны быть изменены.