2013-02-05 19 views
5

Ho il seguente codice XML nella mia configurazione Web e vorrei selezionare un attributo per la rimozione utilizzando le trasformazioni web.config, ma vorrei selezionare l'elemento per la rimozione in base al valore di uno degli elementi figlio.Selezionare il nodo in base al valore del nodo figlio in Web.config Trasforma

mio web.config è qualcosa di simile:

<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> 

Ho provato quanto segue per provare a selezionare il secondo elemento agente per l'eliminazione in base alla elemento figlio <param desc="database">master</param> ma senza successo.

<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> 

risposta

6

Come risolta in this question l'attributo xdt:Locator ha bisogno di usare la sintassi Condition. Quindi il selettore richiesto è:

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

Se vuoi abbinare ' master', questo xpath sarà più preciso: 'param [@ desc = 'database']/text() = 'master''. Altrimenti, potresti potenzialmente corrispondere a ' master'. –

-1

Basta aggiungere /.. sull'estremità, che dovrebbe farlo ..

esempio

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

... al termine di quale? –

+0

potresti aver bisogno di '//' in primo piano, ma se puoi rimuovere l'elemento 'param' con la tua selezione, allora'/.. 'dovrebbe farlo – Martin

2

Basta utilizzare Sitecores proprio config patcher. Questo rimuoverà le impostazioni:

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

Per ulteriori informazioni, guardate qui:

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

+0

La funzione di patch Sitecore non è proprio ciò che voglio in questo caso in cui voglio utilizzare le trasformazioni web.config per creare diversi file web.config in base all'ambiente. Quindi un ambiente rimuoverà il nodo xml, mentre sarà lasciato così com'è per un altro ambiente. –

Problemi correlati