XSL:在元素上进行数学运算后应用模板

时间:2016-01-26 18:13:18

标签: xml xslt

我必须承认,我是一个完全的菜鸟。所以,我提前道歉,因为我认为我所要求的是相当基本的。我现在处于早期学习阶段,所以请耐心等待。

示例XML记录:

<ArrayOfMessage>
  <Message>
  ...
    <LocalTimestamp>130979673444601802</LocalTimestamp>
  ...
  </ArrayOfMessage>
</Message>

预期目标:

将130979673444601802除以(10 * 1000 * 1000) - 11644473600.这相当于1453497841.6748905;或者,原始值的等效Unix纪元时间。我需要这个epoch value,以便我可以在下面应用日期/时间模板。希望到达的日期/时间格式是我可以用来排序的日期/时间格式,以及一个不那么神秘(即更具可读性)的日期/时间格式。

<xsl:template match="LocalTimestamp">
   <xsl:value-of 
select='xs:dateTime("1970-01-01T00:00:00") + @stamp * xs:dayTimeDuration("PT0.001S")'/>
</xsl:template>

非常感谢任何建议或意见。谢谢!

1 个答案:

答案 0 :(得分:0)

AFAICT,你想做:

<xsl:value-of select="xs:dateTime('1970-01-01T00:00:00') + (. div 10000000 - 11644473600) * xs:dayTimeDuration('PT1S')"/>

应用于值为130979673444601802的节点,结果为:

2016-01-22T20:15:44.46018

当然,如果你从一开始就明确表示给定的数字http://docs.ansible.com/ansible/command_module.html,那么通过Unix时间转换是不必要的并发症就显而易见了。您可以通过以下方式将给定数字直接转换为日期:

<xsl:value-of select="xs:dateTime('1601-01-01T00:00:00') + . div 10000000 * xs:dayTimeDuration('PT1S')"/>