xml - 使用 XSLT 根据时间更改日期
问题描述
我有一个带有考勤报告的 xml 文件,每个用户都有一个“间隔”元素。这里的问题是,当员工在第二天注销时,即使对于 Out 元素(例如第二个元素),日期也始终设置为 In 日期:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<transferStaffAttendance version='0.2'>
<user>100994</user>
<intervalStart>2020-03-02</intervalStart>
<intervalEnd>2020-03-02</intervalEnd>
<entries>
<entry>
<entryStart>
<date>2020-03-02</date>
<time>06:37</time>
</entryStart>
<entryEnd>
<date>2020-03-02</date>
<time>15:34</time>
</entryEnd>
</entry>
</entries>
</interval>
<interval>
<user>101400</user>
<intervalStart>2020-03-02</intervalStart>
<intervalEnd>2020-03-02</intervalEnd>
<entries>
<entry>
<entryStart>
<date>2020-03-02</date>
<time>00:00</time>
</entryStart>
<entryEnd>
<date>2020-03-02</date>
<time>00:00</time>
</entryEnd>
</entry>
</entries>
</interval>
<interval>
<user>102806</user>
<intervalStart>2020-03-02</intervalStart>
<intervalEnd>2020-03-02</intervalEnd>
<entries>
<entry>
<entryStart>
<date>2020-03-02</date>
<time>18:47</time>
</entryStart>
<entryEnd>
<date>2020-03-02</date>
<time>03:10</time>
</entryEnd>
</entry>
</entries>
</interval>
</transferStaffAttendance>
如果用户在午夜后退出,我想通过计算 In 和 Out 值之间的差异来将日期更改为下一个日期,如下所示:
<interval>
<user>102806</user>
<intervalStart>2020-03-02</intervalStart>
<intervalEnd>2020-03-03</intervalEnd>
<entries>
<entry>
<entryStart>
<date>2020-03-02</date>
<time>18:47</time>
</entryStart>
<entryEnd>
<date>2020-03-03</date>
<time>03:10</time>
</entryEnd>
</entry>
</entries>
</interval>
如何使用 XSLT 做到这一点?
解决方案
在 XSLT 2 和 3 中,您可以使用运算符+
和 anxs:date
和持续时间作为操作数来进行日期算术:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="interval[entries/entry/entryEnd/time < entries/entry/entryStart/time]/intervalEnd
|
interval/entries[entry/entryEnd/time < entry/entryStart/time]/entry/entryEnd/date">
<xsl:copy>
<xsl:value-of select="xs:date(.) + xs:dayTimeDuration('P1D')"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- java - KafkaAdminClient如何设置配额限制?
- sql - Postgres 中的 RIGHT() 函数不正确
- html - 向水平图像轮播添加框阴影
- c++ - 如何使 C++ 中的对象易失?
- ios - 如何在 iOS 中流式传输没有广播扩展的屏幕
- node.js - npm pkg 编译可执行错误以运行其他可执行文件
- tableau-api - tableau 双轴多变量
- reactjs - Native-base 图标出现在左侧不显示
- javascript - 将绝对元素重新定位到右侧
- javascript - 我的 React 应用程序将我的图像的 URL 呈现为 url('undefined');