2017-02-22 10 views
0

Учитывая этот конфигурационный файл XML:Применение XDT преобразования на основе значения элемента родственного

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

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

Ни один элемент в исходном документе не соответствует «/ работа-планирования-данные/графика/триггера/хрон [имя = 'Trigger2']».

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

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

Я делаю что-то не так?

ответ

0

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

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