基于兄弟元素值应用 XDT 变换

Applying XDT transform based on sibling element value

鉴于此 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>

我想为 Trigger2 转换 <cron-expression> 值。

使用此转换:

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

构建项目时,我看到编译器警告:

No element in the source document matches '/job-scheduling-data/schedule/trigger/cron[name='Trigger2']'.

XPath 查询似乎正确,但从未应用该规则(因此出现编译器警告)。

我的项目配置为在 Visual Studio 2015 年使用 TransformXml 任务构建时进行转换。

我是不是做错了什么?

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