Поскольку у вас, кажется, есть доступ к пространству имен MSXSL, вы можете добавить в таблицу стилей XSL расширение сценария, которое выполняет преобразование даты на более подходящем языке программирования (см. MSDN ).
Для примера давайте использовать JScript, но использование языков .NET в блоке сценария также возможно (см. MSDN ).
Далее используется блок <msxsl:script>
для определения функции convertDate()
, которая впоследствии будет использоваться в вашем коде XSLT с префиксом. Он преобразует действительные даты в этом формате "Wednesday, April 25, 2018 - 11:00"
в "2018-04-25 11:00"
. Все, что он не может преобразовать, он возвращает без изменений.
<msxsl:script>
разрешено на том же уровне, где находятся элементы <xsl:template>
.
<msxsl:script language="JScript" implements-prefix="script">
<![CDATA[
// converts dates like this one: "Wednesday, April 25, 2018 - 11:00"
// to "2018-04-25 11:00"
function convertDate(text) {
var m = text.match(/[a-z]+, ([a-z]+) (\d{1,2}), (\d{4}) - (\d\d:\d\d)/i),
zero = function (s) { return ('0' + s).slice(-2); },
dateStr, date;
if (m) {
dateStr = [m[2], m[1], m[3], m[4]].join(' ');
date = new Date(Date.parse(dateStr));
if (date) {
return [
date.getFullYear(),
'-',
zero(date.getMonth() + 1),
'-',
zero(date.getDate()),
' ',
zero(date.getHours()),
':',
zero(date.getMinutes())
].join('');
}
}
return text;
}
]]>
</msxsl:script>
<xsl:template match="pubDate">
<xsl:copy>
<xsl:value-of select="script:convertDate(.)"/>
</xsl:copy>
</xsl:template>