Необходимо изменить формат даты с 123121 (ммддгг) на 31/12/2021 (мм/дд/гггг).
Входной XML у меня есть:
<section>
<Plans>
<Date>123121</Date>
</Plans>
</section>
<p>date: <keyword keyref = "Cost:Date:date4"/></p>
XSL я пробовал:
<xsl:template match = "keyword[contains(@keyref, 'Cost:Date:date4')]">
<xsl:param name = "section" as = "element()" tunnel = "yes">
<empty/>
</xsl:param>
<keyword keyref = "Cost:Date:date4">
<xsl:call-template name = "format_variable">
<xsl:with-param name = "cur_keyref" select = "@keyref"/>
<xsl:with-param name = "cur_value"
select = "$section//Plans/Date"/>
<xsl:with-param name = "cur_format" select = "'date4'"/>
</xsl:call-template>
</keyword>
</xsl:template>
<xsl:template name = "format_variable">
<xsl:param name = "cur_keyref" as = "xs:string">MISSING</xsl:param>
<xsl:param name = "cur_value" as = "xs:string">MISSING</xsl:param>
<xsl:param name = "cur_format" as = "xs:string">MISSING</xsl:param>
<xsl:choose>
<xsl:when test = "$cur_format = 'date4'">
<xsl:value-of select = "format-dateTime($cur_value, '[M01]/[D01]/[Y0001]')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select = "concat('MISSING_FORMAT_', $cur_keyref, '_', $cur_value, '_[', $cur_format, ']')"
/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Когда я пытаюсь использовать приведенный выше код, он показывает следующую ошибку:
Invalid dateTime value "123121" (Too short)
Пожалуйста, помогите мне получить значение 12/31/2021(mm/dd/yyyy) на выходе.





Вы пытаетесь использовать функцию format-dateTime() для чего-то, что не является допустимым dateTime.
Чего не сделаешь просто:
<xsl:value-of select = "replace(Date, '(.{2})(.{2})(.{2})', '$1/$2/20$3')"/>
Обратите внимание, что это предполагает, что все ваши даты будут в 21 веке. В противном случае вам потребуется дополнительная логика для определения века.