Как отобразить значение даты в XSLT-преобразовании
Мой пользовательский интерфейс предоставляет выбранную пользователем дату в миллисекундах в бэкэнд-слой отдыха.
Например, скажем, пользователь выбирает "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 ответ
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>