2012-12-14 14 views
5

mam przekształcić że wygląda toWeb warunek transformacji config/mecz, aby wybrać węzeł na podstawie atrybutu węzeł nadrzędny

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

Więc chcę XDT: Lokalizator aby wybrać węzeł f tylko wtedy, gdy węzeł nadrzędny ma atrybut o określonej wartości.

xdt: Locator zostanie przetłumaczony na następujące wyrażenie XPath:

/a/b/c/d/e/f[/[email protected]='UpdateLanguageProfile'] 

Która jest nieprawidłowy.

Pytanie więc brzmi: co mogę umieścić w warunku, czyli nawiasach kwadratowych XPath, aby wybrać węzeł f na podstawie atrybutu w węźle nadrzędnym.

+0

Co się dzieje, jeśli usunąć XDT: Lokalizator całkowicie? Dla mnie transformacja działa poprawnie tak długo, jak rodzic ma określony atrybut name, tak jak tutaj ... –

Odpowiedz

12

Odpowiedź jest taka, że ​​xdt: Locator i xdt: Transform nie muszą znajdować się w tym samym węźle. Po prostu znajdują się w tym samym węźle w każdym przykładzie, jaki kiedykolwiek widziałem.

Można to zrobić:

<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> 
Powiązane problemy