2010-05-05 20 views
5

嗨我在我的Nant构建脚本中使用Xpath来更改开发和我的其他环境之间的一些配置变量。xmlpoke in Nant - 如何更新找到的字符串的所有实例

我已经采取了语法,从这个例子:

的例子是这样的:

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

我想什么是类似于此搜索我的连接字符串和发现的所有实例的东西“ localhost \ SqlExpress“,只是将它们更改为”localhost“

这可能吗?

回答

4

与这里quick'n脏脚本玩弄....

如果您确信只有一个在每个ConnectionString的元素文件,您可以用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> 
+0

感谢彼得 - 伟大的解决方案! – Remotec 2010-05-10 10:31:19

+0

这真的很有帮助。 – 2014-09-24 00:50:36

0

XPath只选择节点,它不能更改节点

完成所需更改的一种方法是对XML文档执行XSLT转换。

为了做到这一点,您必须提供XML文档并准确指定要更改哪些文本节点。

+0

的XPath只选择节点,但xmlpoke(南特的功能)的变化与XPath选择的节点。 Xmlpoke就是问题所在。 – azheglov 2011-10-21 16:23:42

+0

@azheglov:这个问题被标记为“xpath”。即使是“我正在使用XPath更改...”也是不正确的。 OP希望XPath表达式“搜索我的连接字符串”,但他没有提供要应用XPath表达式的XML文档 - 因此这是一个不完整的问题。这是我在答复中所表达的一切。 – 2011-10-21 17:03:26

相关问题