5

嗨,我在我的 Nant 构建脚本中使用 Xpath 来更改开发环境和其他环境之间的一些配置变量。

我从这个例子中获取了语法:

该示例如下所示:

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

我想要的是与此类似的东西来搜索我的连接字符串并找到“localhost\SqlExpress”的所有实例并将它们更改为“localhost”

这可能吗?

4

2 回答 2

4

在这里玩弄一个快速的脏脚本....

如果您确定每个文件中只有一个连接字符串元素,您可以使用 和 的组合来完成此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>
于 2010-05-05T17:59:32.277 回答
0

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

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

为了实现这一点,您必须提供 XML 文档并准确指定要更改的文本节点。

于 2010-05-05T16:20:51.750 回答