【发布时间】:2013-02-12 17:07:41
【问题描述】:
当且仅当匹配的元素不在目标中存在时,我想应用转换。使用 http://webconfigtransformationtester.apphb.com/ 尝试各种 xpath 表达式,但到目前为止没有运气。
例如如果目标 web.config 看起来像这样:
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
</configuration>
那么输出应该是这样的:
<configuration>
<connectionStrings>
<add name="MyCs" provider="System.Data.SqlClient" connectionString="" />
<add name="SomeOtherCs" provider="System.Data.SqlClient" connectionString="" />
</connectionStrings>
<system.web>
<compilation debug="true" />
</system.web>
</configuration>
但是如果目标看起来像这样:
<configuration>
<connectionStrings>
<add name="MyCs" provider="System.Data.IChangedIt" connectionString="my connection string here" />
</connectionStrings>
<system.web>
<compilation debug="true" />
</system.web>
</configuration>
那么转换的结果应该是这样的:
<configuration>
<connectionStrings>
<add name="MyCs" provider="System.Data.IChangedIt" connectionString="my connection string here" />
<add name="SomeOtherCs" provider="System.Data.SqlClient" connectionString="" />
</connectionStrings>
<system.web>
<compilation debug="true" />
</system.web>
</configuration>
换句话说,我只是想将命名的连接字符串添加到配置中,但让管理员用他自己的值填写它。我认为它会像 xdt:Transform="Insert" xdt:Locator="XPath(count(/configuration/connectionStrings)=0)" 一样简单(如果不存在则添加一个 cs 配置部分)但显然不是。
【问题讨论】:
-
你试过
xdt:Locator="XPath(/configuration[not(connectionStrings)])"吗?
标签: xpath web-config web-config-transform