我有一个节点中包含我的XML文件中的以下内容:XSLT 1.0获取当前日期时间
<Apple>2011-12-01T16:33:33Z</Apple>
我希望走这条线,并使用相同格式的当前日期和时间更换如图所示以上。
YYYY-MM-DDTHH:MM:SSZ
节点将被宣告为 'X'
我有一个节点中包含我的XML文件中的以下内容:XSLT 1.0获取当前日期时间
<Apple>2011-12-01T16:33:33Z</Apple>
我希望走这条线,并使用相同格式的当前日期和时间更换如图所示以上。
YYYY-MM-DDTHH:MM:SSZ
节点将被宣告为 'X'
与播放的日期时间命名空间内是不可能单独使用XSLT 1.0。在我采取了类似的情况脚本的帮助..(C#)
示例XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Apple>2011-12-01T16:33:33Z</Apple>
</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[
public string datenow()
{
return(DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"));
}
]]>
</msxsl:script>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Apple">
<xsl:copy>
<xsl:value-of select="cs:datenow()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
结果输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Apple>2012-02-22T18:03:12Z</Apple>
</root>
脚本可以驻留在同一个文件中(像我有它在我的示例XSLT代码),或者如果触发XSLTransformation代码是C#然后将同样的代码在调用地方:)
最好从XML引擎传递当前日期时间。在您的xsl:stylesheet
中声明<xsl:param name="current-datetime"/>
,并传递处理器的值。
您最好将当前数据作为input/xsl:param传递给模板。
XSLT旨在成为纯粹的功能语言;也就是说,所有模板/功能都应符合例如以下条件:如果使用不会导致副作用的参数调用纯函数,则对于该参数列表(有时称为参照透明度),结果是常量,即如果纯函数再次使用相同参数调用,将返回相同的结果(这可以启用缓存优化,例如记忆)。
虽然有这方面的解决方法(如InfantPro'Aravind'指出),不建议做这样的事情;通过这样做,你正在破坏XSLT最重要的优势之一。
可能的重复:http://stackoverflow.com/questions/500915/format-a-date-in-xml-via-xslt – 2012-02-22 12:02:35
@SivaCharan,没有它没有,他正在寻找CURRENT DATE-TIME而不是格式。 – 2012-02-22 12:09:02
请参阅http://stackoverflow.com/questions/5475699/cannot-use-the-current-datetime-function-in-xslt和http://stackoverflow.com/questions/1575111/can-an-xslt-insert-该电流是最新的。如果您不能使用XSLT 2.0,请使用脚本功能 – StuartLC 2012-02-22 12:12:19