如何 return 使用模板的节点集
How to return a node-set with a template
我正在尝试将日期时间字符串转换为 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>
我尝试将模板 return 设为 node/set 而不是片段。请注意,我也尝试过最后没有 /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>
有什么方法可以获取 return 节点集的模板而不是字符串或结果树碎片?
不,对于 XSLT 1.0,您需要使用像 http://exslt.org/func/elements/result/index.html within an http://exslt.org/func/elements/function/index.html 这样的扩展元素才能 return 节点集而不是结果树片段。模板将始终 return 结果树片段。
我正在尝试将日期时间字符串转换为 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>
我尝试将模板 return 设为 node/set 而不是片段。请注意,我也尝试过最后没有 /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>
有什么方法可以获取 return 节点集的模板而不是字符串或结果树碎片?
不,对于 XSLT 1.0,您需要使用像 http://exslt.org/func/elements/result/index.html within an http://exslt.org/func/elements/function/index.html 这样的扩展元素才能 return 节点集而不是结果树片段。模板将始终 return 结果树片段。