我试图在XSLT 1.0中将日期时间字符串转换为基于节点的日期时间。我想从
开始31-12-2014
:
<Date>
<Day>31</Day
<Month>12</Month>
<Year>2014</Year>
</Date>
为了达到这个目的,我创建了这个模板:
<xsl:template name="ToDTNodes">
<xsl:param name="dateTimeString"/>
<xsl:variable name="date" select="substring($dateTimeString,1,10)"/>
<xsl:variable name="result">
<DtNode>
<Year>
<xsl:value-of select="substring($date,7,4)"/>
</Year>
<Month>
<xsl:value-of select="substring($date,4,2)"/>
</Month>
<Day>
<xsl:value-of select="substring($date,1,2)"/>
</Day>
</DtNode>
</xsl:variable>
<xsl:copy-of select="msxsl:node-set($result)/DtNode"/>
</xsl:template>
我试图使模板返回一个节点/集合,而不是一个片段。请注意,我也在没有/DtNode
的情况下尝试了这个。这将使我能够调用该模板,而无需在每次调用时使用节点集函数。
遗憾的是,我得到一个异常,当试图访问一个子:
XslTransformException: To use a result tree fragment in a path expression, first convert it to a node-set using the msxsl:node-set() function
当我尝试这样做时:
<xsl:variable name="result">
<xsl:call-template name="ToDTNodes">
<xsl:with-param name="dateTimeString" select="$SomeNode/BeginDate" />
</xsl:call-template>
</xsl:variable>
<Value>
<xsl:value-of select="$result/Year"/>
</Value>
是否有任何方法可以让模板返回节点集而不是字符串或结果树片段?
不,在XSLT 1.0中,您需要在http://exslt.org/func/elements/function/index.html中使用像http://exslt.org/func/elements/result/index.html这样的扩展元素,以便能够返回节点集而不是结果树片段。模板总是返回一个结果树片段。