2013-02-05 5 views
5

У меня есть следующий XML в моей веб-конфигурации, и я бы хотел выбрать атрибут для удаления с помощью преобразований web.config, но я хотел бы выбрать элемент для удаления основанный на значении одного из дочерних элементов.Выберите узел на основе значения дочернего узла в Web.config Transform

Моя web.config что-то вроде этого:

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

Я попытался следующие, чтобы попытаться выбрать второй элемент агента для удаления на основе дочернего элемента <param desc="database">master</param>, но без успеха.

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

ответ

6

Как ответил this question атрибут xdt:Locator необходимо использовать синтаксис Condition. Таким образом, требуемый селектор:

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

Если вы хотите совместить ' master', этот xpath будет более точным: 'param [@ desc = 'database']/text() = 'master''. В противном случае вы могли бы сопоставить ' master'. –

-1

Просто добавьте /.. на конце, что должен это сделать ..

например

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

... до конца которого один? –

+0

вам может понадобиться '//' на передней панели, но если вы можете удалить элемент 'param' с вашим выбором, то'/..' должен сделать это – Martin

2

Просто используйте Sitecores собственный конфигурационный патчер. Это удалит ваши настройки:

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

Для получения дополнительной информации, смотрите здесь:

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

+0

. Функция исправления Sitecore на самом деле не то, что я хочу в этом когда я хочу использовать web.config для создания разных файлов web.config на основе среды. Таким образом, одна среда удалит узел xml, тогда как он будет оставлен как есть для другой среды. –

Смежные вопросы