首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmlpoke in Nant -如何更新找到的字符串的所有实例

xmlpoke in Nant -如何更新找到的字符串的所有实例
EN

Stack Overflow用户
提问于 2010-05-05 23:00:38
回答 2查看 2K关注 0票数 5

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

我采用了这个例子中的语法:

示例如下所示:

代码语言:javascript
复制
<xmlpoke
    file="config01/app.config"
    xpath="/configuration/appSettings/add[@key='AppName']/@value"
    value="TradeMonster">
</xmlpoke>

我想要的是类似这样的东西来搜索我的连接字符串,找到"localhost\SqlExpress“的所有实例,只需将它们更改为"localhost”

这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-06 01:59:32

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

如果您确定每个文件中只有一个connectionstring元素,那么您可以通过组合使用xmlpeekxmlpoke来实现这一点。使用一些C#可以更容易地修改字符串,因此使用脚本任务执行正则表达式搜索和替换:

代码语言:javascript
复制
 <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>
票数 4
EN

Stack Overflow用户

发布于 2010-05-06 00:20:52

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2774353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档