将当前日期作为值添加到ISO 8601格式XSLT中的标记

时间:2017-07-04 08:06:42

标签: xml xslt xslt-2.0

我有一个像下面这样的xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<entry key="user">1234</entry>
</properties>

我想添加两个新标签,其中一个包含ISO 8601格式的当前日期值,另一个标签的日期设置为ISO 8601格式的当前日期+ 10年,并使用xslt将其转换为新的xml文件输出xml应该是这样的

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<properties>
<entry key="user">1234</entry>
<entry key="doc:uploadDate">2017-07-04T22:18:08Z</entry>
<entry key="doc:deleteDate">2027-07-04T22:18:08Z</entry>
</properties>

我正在使用以下xslt。

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">

    <xsl:variable name="currentDate">
        <xsl:value-of select="current-dateTime()" />
    </xsl:variable>

    <xsl:template match="entry[@key='doc:uploadDate']">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:value-of
                select="replace(normalize-space($currentDate),
        '^(\d{2})-(\d{2})-(\d{4})\s+(.*)','$3-$1-$2T$4Z')" />
        </xsl:copy>
    </xsl:template>

  <xsl:template match="@*|node()">
      <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
  </xsl:template>   
</xsl:transform>

有人可以帮我这个..

2 个答案:

答案 0 :(得分:2)

您可以在当前日期添加十年的持续时间:

    <xsl:variable name="curr-date" select="current-dateTime()"/>
    <entry>
        <xsl:value-of select="$curr-date"/>
    </entry>
    <entry>
        <xsl:value-of select="$curr-date + xs:yearMonthDuration('P10Y')"/>
    </entry>

答案 1 :(得分:0)

为什么你不能简单地做到:

<xsl:template match="/properties">
    <xsl:copy>
        <xsl:copy-of select="*"/>
        <entry key="doc:uploadDate">
            <xsl:value-of select="current-dateTime()"/>
        </entry>
        <entry key="doc:deleteDate">
            <xsl:value-of select="current-dateTime() + xs:yearMonthDuration('P10Y')"/>
        </entry>
    </xsl:copy>
</xsl:template>