1

换句话说,在下面的 web.config xml 中,我想删除所有类型属性以“Elmah”开头的元素。

<httpModules>
  <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
  <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
  <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>

我尝试了几种基本变换的组合和结构,但有各种错误,

<add xdt:Locator="XPath([starts-with(@type,'Elmah.')" xdt:Transform="Remove"/>

在放弃并删除整个 httpModules 元素之前,因为不需要 XPath。

4

2 回答 2

4

XPath 定位器需要一个完全限定的 XPath 位置,因此您的转换当前不匹配任何元素。如果您改用 Condition Locator(它需要一个相对 XPath),它应该匹配:

<add xdt:Locator="Condition(starts-with(@type,'Elmah.')" xdt:Transform="RemoveAll"/>

另请注意, xdt:Transform Remove 只会对第一个匹配的元素进行操作,因此您需要使用 RemoveAll 来实现您想要的。

msdn 上的摘要很好地涵盖了这一点。

于 2012-09-04T22:09:22.627 回答
1

您是否尝试过单独删除每个模块?

<add name="ErrorLog" xdt:Locator="Match(name)" xdt:Transform="Remove"/>
<add name="ErrorMail" xdt:Locator="Match(name)" xdt:Transform="Remove"/>
<add name="ErrorFilter" xdt:Locator="Match(name)" xdt:Transform="Remove"/>
于 2012-08-28T19:59:16.930 回答