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