Применение XDT-преобразования на основе значения элемента-брата

Учитывая этот файл конфигурации XML:

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" version="2.0">
  <schedule>
    <trigger>
      <cron>
        <name>Trigger1</name>
        <cron-expression>0 0 1 * * ?</cron-expression>
      </cron>
    </trigger>
    <trigger>
      <cron>
        <name>Trigger2</name>
        <cron-expression>0 0 2 * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>

Я хочу преобразовать <cron-expression> значение для Trigger2,

Используя это преобразование:

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <schedule>
    <trigger>
      <cron>
        <name>Trigger2</name>
        <cron-expression 
          xdt:Transform="Replace" 
          xdt:Locator="XPath(/job-scheduling-data/schedule/trigger/cron[name='Trigger2'])">0 0 3 * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>

Когда проект собирается, я вижу предупреждение компилятора:

Ни один элемент в исходном документе не соответствует '/job-scheduling-data/schedule/trigger/cron[name='Trigger2']'.

Запрос XPath кажется правильным, но правило никогда не применяется (отсюда и предупреждение компилятора).

Мой проект настроен для преобразования при сборке с помощью задачи TransformXml в Visual Studio 2015.

Я делаю что-то неправильно?

1 ответ

Решение

@PingCrosby ответ на другой вопрос помог решить проблему. Решение:

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <schedule>
    <trigger>
      <cron xdt:Locator="XPath(//*[local-name()='job-scheduling-data']
                                /*[local-name()='schedule']
                                /*[local-name()='trigger']
                                /*[local-name()='cron']
                                  [*[local-name() = 'name'] = 'Trigger2'])">
        <cron-expression xdt:Transform="Replace">0 0 3 * * ?</cron-expression>
      </cron>
    </trigger>
  </schedule>
</job-scheduling-data>
Другие вопросы по тегам