Web配置转换条件/匹配,以根据父节点属性选择节点

时间:2012-12-14 21:10:36

标签: xpath web-config-transform

我有一个看起来像这样的变换

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <a>
    <b>
      <c>
        <d>
          <e name="UpdateLanguageProfile">
            <f xdt:Transform="Replace" xdt:Locator="Condition(/..@name='UpdateLanguageProfile')">
              stuff here
            </f>
          </e>
        </d>
      </c>
    </b>
  </a>

所以我希望xdt:Locator仅在父节点具有指定值的属性时选择f节点。

xdt:Locator被转换为以下xpath表达式:

/a/b/c/d/e/f[/..@name='UpdateLanguageProfile']

哪个无效。

所以问题是,我可以在条件中放入什么,即XPath方括号,以便根据父节点中的属性选择f节点。

1 个答案:

答案 0 :(得分:15)

答案是xdt:Locator和xdt:Transform不需要在同一个节点上。在我见过的每个例子中,它们碰巧都在同一个节点上。

你可以这样做:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <a>
    <b>
      <c>
        <d>
          <e name="UpdateLanguageProfile" xdt:Locator="Match(name)">
            <f xdt:Transform="Replace">
              stuff here
            </f>
          </e>
        </d>
      </c>
    </b>
  </a>