Javascript в XSLT
Нужно в результирующем документе ставить текущую дату и надо вставить код джаваскрипт в шаблон, который будет дату выводить, ведь это нельзя сделать средствами xslt. Как вставить джаваскрипт функцию выводящую текущую дату в тело xslt-шаблона?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:abcd="http://www.tdwg.org/schemas/abcd/2.06"
version="1.0">
<xsl:template match="abcd:DataSets">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="letter"
page-height="11in" page-width="8.5in"
margin-top="0.5in" margin-bottom="0.5in"
margin-left="0.5in" margin-right="0.5in">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="letter">
<fo:flow flow-name="xsl-region-body">
<xsl:for-each select="abcd:DataSet">
<!-- тут нужно вывести дату текущую -->
...
</xsl:stylesheet>
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Если вы используете .Net XslCompiledTransform, вот как это реализовать на c#.
XSLT 1.0
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:csharp="urn:my-scripts" exclude-result-prefixes="msxsl csharp">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<root>
<CurrentDateTime>
<xsl:value-of select="csharp:CurrentDateTime('yyyy-MM-ddTHH:mm:ss.fff')"/>
</CurrentDateTime>
<CurrentDate>
<xsl:value-of select="csharp:CurrentDateTime('yyyy-MM-dd')"/>
</CurrentDate>
<DefaultDateTime>
<xsl:value-of select="csharp:CurrentDateTime('')"/>
</DefaultDateTime>
</root>
</xsl:template>
<msxsl:script language="C#" implements-prefix="csharp">
<![CDATA[
public string CurrentDateTime(string format)
{
// default format
if (string.IsNullOrEmpty(format)) {
format = "yyyy-MM-ddTHH:mm:ss.fffzzz";
}
return DateTime.Now.ToString(format);
}
]]>
</msxsl:script>
</xsl:stylesheet>
Результат
<?xml version="1.0" encoding="utf-8"?>
<root>
<CurrentDateTime>2023-07-01T22:47:26.224</CurrentDateTime>
<CurrentDate>2023-07-01</CurrentDate>
<DefaultDateTime>2023-07-01T22:47:26.224-04:00</DefaultDateTime>
</root>