очевидно, что это невозможно только с XSLT 1.0 ... для аналогичного QI предложенного скриптинга .. (C #) ..
Образец XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<date>02/10/2012</date>
<date>2/9/2012</date>
</root>
Образец XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:cs="urn:cs">
<xsl:output method="xml" indent="yes"/>
<msxsl:script language="C#" implements-prefix="cs">
<![CDATA[
private static string[] formats = new string[]
{
"dd/MM/yyyy",
"dd/M/yyyy",
"d/M/yyyy",
"d/MM/yyyy",
"dd/MM/yy",
"dd/M/yy",
"d/M/yy",
"d/MM/yy"
};
public string date_conv(string date1)
{
DateTime dDateTime;
DateTime.TryParseExact(date1, formats, new global::System.Globalization.CultureInfo("en-US"), global::System.Globalization.DateTimeStyles.None, out dDateTime);
return(String.Format("{0:MMMM yyyy}", dDateTime));
}
]]>
</msxsl:script>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="date">
<xsl:copy>
<xsl:value-of select="cs:date_conv(.)"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Результирующий вывод:
<?xml version="1.0" encoding="utf-8"?>
<root>
<date>October 2012</date>
<date>September 2012</date>
</root>
Сценарий может находиться в одном и том же файле (как он есть в моем примере XSLT-кода) или, если код, запускающий XSLTransformation, является C #, затем переместите тот же кодв месте вызова:)