Templates 如何返回带有模板的节点集
我试图在XSLT1.0中将日期时间字符串转换为基于节点的日期时间。 基本上我想从Templates 如何返回带有模板的节点集,templates,xslt,transform,xslt-1.0,node-set,Templates,Xslt,Transform,Xslt 1.0,Node Set,我试图在XSLT1.0中将日期时间字符串转换为基于节点的日期时间。 基本上我想从 31-12-2014 致: 当我尝试这样做时: <xsl:variable name="result"> <xsl:call-template name="ToDTNodes"> <xsl:with-param name="dateTimeString" select="$SomeNode/BeginDate" /> </xsl:call-templat
31-12-2014
致:
当我尝试这样做时:
<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中,您需要使用类似于的扩展元素才能返回一个节点集而不是结果树片段。模板将始终返回一个结果树片段。为什么不使用node-set()函数将$result变量转换为节点集呢?正如错误消息所建议的那样?我知道这是删除异常的解决方案。但是,当我想从许多不同的模板调用此模板时,我必须在每次调用中添加
node-set()
函数。此外,如果模板不需要“特殊”调用,这将提高可维护性。“我必须在每次调用中添加node-set()函数。”如果将另一个变量定义为
,则不会。我经常这样做——XSLT1.0就是这样工作的。谢谢您的回答。遗憾的是,我不能在我的项目中使用exslt。
<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>
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>