Как отобразить значение даты в XSLT-преобразовании - PullRequest
0 голосов
/ 07 ноября 2018

Мой пользовательский интерфейс предоставляет выбранную пользователем дату в миллисекундах для внутреннего слоя покоя.

Например, скажем, пользователь выбирает «07/11/2018» в пользовательском интерфейсе, а затем передается на уровень REST в виде миллисекунд «1541509200000». И уровень REST отображает это значение в «XMLGregorianCalendarObject» в моем DTO.

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, когда исходный пользователь выбрал 07/11/2018 в преобразовании XSLT.

1 Ответ

0 голосов
/ 07 ноября 2018

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>
...