Применение 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>