如何返回带有模板的节点集



我试图在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这样的扩展元素,以便能够返回节点集而不是结果树片段。模板总是返回一个结果树片段。

相关内容

  • 没有找到相关文章

最新更新