【问题标题】:XMLNS attribute removed by Slow Cheetah transformation由 Slow Cheetah 转换删除的 XMLNS 属性
【发布时间】:2013-03-13 22:49:03
【问题描述】:

我正在尝试使用 Slow Cheetah 来转换 Windows 计划任务配置文件。我只是想添加“重复”节点信息,如下所示:

原文:

<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-01-02T09:32:12.2196371</Date>
    <Author>xxx</Author>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2013-01-10T01:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
.....
</Task>

必需的附加 XML

<CalendarTrigger>
   <Repetition>
     <Interval>PT300S</Interval>
   </Repetition>
</CalendarTrigger>

为此,我有以下转换文件:

<?xml version="1.0" encoding="utf-16" ?>
<Task version="1.2">
  <Triggers>
    <CalendarTrigger xdt:Transform="Insert">
      <Repetition>
        <Interval>PT300S</Interval>
      </Repetition>
    </CalendarTrigger>
  </Triggers>
</Task>

我遇到的问题是 CalendarTrigger 节点之外的所有属性都被删除(因此使生成的转换配置成为无效的计划任务格式)。

我已经尝试添加

xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="SetAttributes" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"

到任务节点,但属性随后在 CalendarTrigger 级别生成(我不能将此属性放在原始属性上,因为我会得到“源文档中没有元素匹配'/Task/Triggers'”)。

任何指针?

更新:

问题似乎与 xmlns 属性有关;如果我尝试将其包含在原始文件的“任务”节点中,我会得到“源文档中没有元素匹配 '/Task/Triggers'” - 但是将此属性更改为 'xmlns2' 可以正常工作并产生我需要的内容(尽管带有“xmlns2”属性!)。这是慢猎豹的已知限制吗?有人知道潜在的解决方法吗?

【问题讨论】:

    标签: xslt slowcheetah


    【解决方案1】:

    那是因为你的xdt:Transform="Insert" 是高一级。

    这应该可行:

    <?xml version="1.0" encoding="utf-16" ?>
    <Task xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
        <Triggers>
          <CalendarTrigger>
            <Repetition xdt:Transform="Insert">
              <Interval>PT300S</Interval>
            </Repetition>
          </CalendarTrigger>
        </Triggers>
    </Task>
    

    【讨论】:

    • 谢谢 - 你是正确的关于我的转换属性被应用在错误的级别,但我仍然遇到原来的问题 - xdt:Transform 之外的属性被删除(这会破坏计划任务格式,因为它需要根 'Task' 节点中的 'xmlns="schemas.microsoft.com/windows/2004/02/mit/task"'...
    • @NickH 我已经尝试过您提供的示例,它适用于我编辑的答案。如果有帮助,请告诉我!
    • 我仍然无法让它正常工作。生成的转换是完美的 - 除了 Task 标头节点中缺少 xmlns 属性。也许这是由于旧版本的慢猎豹?我会进行相应的调查和更新...
    • 一位同事已经能够使用完全相同的代码库成功地产生所需的转换(使用 VS 和 msbuild),所以这似乎是我本地机器上的一个问题。接受你的回答。谢谢。
    • 如果有帮助,我正在使用 2.5.3 版本。
    猜你喜欢
    • 2014-05-15
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多