当且仅当目标中不存在匹配的元素时,我想应用转换。使用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 配置部分)但显然不是。