2013-02-05 21 views
5

Ich habe die folgende XML in meiner Webkonfiguration und ich möchte ein Attribut zum Entfernen mit web.config Transformationen auswählen, aber ich möchte das Element zum Entfernen auswählen basierend auf dem Wert eines der untergeordneten Elemente.Wählen Sie den Knoten basierend auf Kindknotenwert in Web.config Transformieren

Meine web.config ist so etwas wie dieses:

<configuration> 
    <sitecore> 
     <scheduling> 
      <agent type="Sitecore.Tasks.DatabaseAgent"> 
      <param desc="database">core</param> 
      </agent> 
      <agent type="Sitecore.Tasks.DatabaseAgent"> 
      <param desc="database">master</param> 
      </agent> 
     </scheduling> 
    </sitecore> 
</configuration> 

Ich habe versucht, die folgenden zu versuchen, das zweite Mittel Element auf das Kind-Element basierend zum Löschen auswählen <param desc="database">master</param> aber ohne Erfolg.

<configuration> 
    <sitecore> 
     <scheduling> 
      <!-- Attempt 1 --> 
      <agent type="Sitecore.Tasks.DatabaseAgent" 
       xdt:Transform="Remove" 
       xdt:Locator="XPath(configuration/sitecore/scheduling/agent/param[text()='master'])"/> 

      <!-- Attempt 2 --> 
      <agent type="Sitecore.Tasks.DatabaseAgent" 
       xdt:Transform="Remove"> 
      <param desc="database" 
        xdt:Locator="XPath([text()='master'])"/> 
      </agent> 
     </scheduling> 
    </sitecore> 
</configuration> 

Antwort

6

Wie in this question die xdt:Locator beantwortet Attribut muss die Condition Syntax verwenden. Also der erforderliche Selektor ist:

<agent type="Sitecore.Tasks.DatabaseAgent" 
     xdt:Transform="Remove" 
     xdt:Locator="Condition(param/@desc='database' and param/text()='master')" /> 
+0

Wenn Sie ' Master' anpassen wollen, ist dieser Xpath genauer: 'param [@ desc = 'Datenbank']/text() = 'master''. Anderenfalls könnten Sie möglicherweise ' Master' zuordnen. –

-1

Gerade /.. auf das Ende hinzufügen, das sollte es tun ..

z.B.

XPath(configuration/sitecore/scheduling/agent/param[text()='master']/..) 
+0

... bis zu welchem ​​Ende? –

+0

Sie müssen '' '' 'auf der Vorderseite, aber wenn Sie das' param' Element mit Ihrer Auswahl entfernen können, dann sollte das '/ ..' es tun – Martin

2

Verwenden Sie einfach Sitecores eigenen Config Patcher. Dies wird Ihre Einstellung entfernen:

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <scheduling> 
     <agent patch:instead="*[@type='Sitecore.Tasks.DatabaseAgent' and param='master']"> 
     </agent> 
    </scheduling> 
</sitecore> 
</configuration> 

Weitere Informationen hier:

http://intothecore.cassidy.dk/2009/05/working-with-webconfig-include-files-in.html http://www.thescrewballdivision.com/playing-with-sitecore-include-files

+0

Die Sitecore Patching-Funktion ist nicht wirklich, was ich will in diesem case, da ich web.config-Transformationen verwenden möchte, um verschiedene web.config-Dateien basierend auf der Umgebung zu erstellen. Eine Umgebung entfernt also den XML-Knoten, während er für eine andere Umgebung unverändert bleibt. –

Verwandte Themen