2

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>

文字列または結果ツリーのフラグメントの代わりにノードセットを返すテンプレートを取得する方法はありますか?

4

1 に答える 1

3

いいえ、XSLT 1.0 では、http://exslt.org/func/elements/function/index.html内でhttp://exslt.org/func/elements/result/index.htmlのような拡張要素を使用する必要があります結果ツリーのフラグメントではなく、ノード セットを返すことができるようにします。テンプレートは常に結果ツリー フラグメントを返します。

于 2015-07-15T10:32:53.237 に答える