如何在XSLT转换中显示日期值

时间:2018-11-07 05:00:47

标签: java xml rest xslt xmlgregoriancalendar

我的UI将用户选择的日期(以毫秒为单位)提供给后端休息层。

例如,假设用户从UI中选择“ 07/11/2018”,则它将以毫秒“ 1541509200000”的形式传递到REST层。 REST层将此值映射到我的DTO中的“ XMLGregorianCalendarObject”。

import java.io.Serializable;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.bind.annotation.XmlSchemaType;

public class PersonDetails implements Serializable
{

    @XmlSchemaType(name = "date")
    protected XMLGregorianCalendar dateOfBirth;

    public XMLGregorianCalendar getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(XMLGregorianCalendar value) {
        this.dateOfBirth = value;
    }

}

此DTO转换为XML并存储。 XML有效负载如下所示:

    <personDetails>
       <dateOfBirth>2018-11-06Z</dateOfBirth>
    </personDetails>

我有下面的XSLT代码,当前仅显示上面的dateOfBirth元素:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">    
        <div>
            <div> Date of birth: </div>
            <div> <xsl:value-of select="//personDetails/dateOfBirth" /> </div>
        </div>
</xsl:template>

它会生成输出

Date of birth: 2018-11-06Z

我应该怎么做才能显示dateOfBirth作为原始用户在XSLT转换中选择的2018年11月11日。

1 个答案:

答案 0 :(得分:0)

XSLT 1.0没有日期概念。您必须使用字符串函数来操纵输入:

<xsl:template match="personDetails">    
    <div>
        <div> Date of birth: </div>
        <div>
            <!-- day-->
            <xsl:value-of select="substring(dateOfBirth, 9, 2)" />
            <xsl:text>/</xsl:text>
            <!-- month-->
            <xsl:value-of select="substring(dateOfBirth, 6, 2)" />
            <xsl:text>/</xsl:text>
            <!-- year-->
            <xsl:value-of select="substring(dateOfBirth, 1, 4)" />
        </div>
    </div>
</xsl:template>