我正在尝试为没有键或名称的节点设置属性,但它的相邻节点可以通过其name
属性来识别。但我真的很难想出一个定位表达式来选择正确的节点。
源xml是:
</configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
...
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
...
</assemblyBinding>
</runtime>
</configuration>
我试过了
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
...
<dependentAssembly>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" xdt:Transform="SetAttributes"
xdt:Locator="XPath(//../assemblyIdentity[@name='System.Web.WebPages'])"/>
</dependentAssembly>
...
</assemblyBinding>
</runtime>
</configuration>
但它不会更新节点的oldVersion
属性,bindingRedirect
如果我完全省略xdt:Locator="..."
它,它会更改所有bindingRedirect
节点的值。
更新: 使用这个在线 xpath 评估器和 Jack Fleeting 的答案,我找到了一个 xpath 表达式,它正确选择了我想要的节点
//dependentAssembly/assemblyIdentity[@name='System.Web.WebPages']/following-sibling::bindingRedirect
现在的问题似乎是转换引擎不知道如何处理这个问题。我尝试使用转换Replace
和SetAttributes
,但都没有导致节点更新。有任何想法吗。