2016-12-27 7 views
0

以下は私の日付をフォーマットするテンプレートです。XSLTテンプレートを2つの異なるノードに追加することはできますか?

<xsl:template match="data/header/ORDER_DATE"> 
    <xsl:copy> 
     <xsl:value-of select="substring(., 7, 2)" /> 
     <xsl:text> </xsl:text> 
     <xsl:variable name="month" select="substring(., 5, 2)" /> 
     <xsl:value-of select="substring('JanFebMarAprMayJunJulAugSepOctNovDec', 3 * ($month - 1) + 1, 3)"/> 
     <xsl:text> </xsl:text> 
     <xsl:value-of select="substring(., 1, 4)" /> 
    </xsl:copy> 
</xsl:template> 

以下は、テンプレートを私のヘッダーに適用するためのコードです。以下は

<xsl:apply-templates select="ORDER_DATE" /> 

私は同じテンプレートを適用する必要がある2つの異なるノードが存在し、XML

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <header> 
        <ORDER_DATE>20161209</ORDER_DATE> 
    </header> 
    <order_item> 
       <ITEM_DATE>20161211000000</ITEM_DATE> 
    </order_item> 
    <order_item> 
        <ITEM_DATE>20161212000000</ITEM_DATE> 
    </order_item> 
</data> 

対応するためのコードである。しかし。このテンプレートを一般的な関数として使用する方法はありますか?再利用可能な場所であればどこにでも適用できますか?

+0

を使用してみては?完全な[mcve]を提供するだけですか? – zx485

+0

希望の出力を提供することは、あなたの質問に答えるのに役立ちます。 – zx485

答えて

1

使用

<xsl:template match="ORDER_DATE|ITEM_DATE"> 
... 

それとも、あなたはそれがさらに一般たい場合は、あなたのXMLは次のようになりんは何という名前のテンプレート

<xsl:template match="data/*/*[contains(local-name(),'DATE')]"> 
    <xsl:call-template name="date" /> 
</xsl:template> 

<xsl:template name="date"> 
    <xsl:copy> 
     <xsl:value-of select="substring(., 7, 2)" /> 
     <xsl:text> </xsl:text> 
     <xsl:variable name="month" select="substring(., 5, 2)" /> 
     <xsl:value-of select="substring('JanFebMarAprMayJunJulAugSepOctNovDec', 3 * ($month - 1) + 1, 3)"/> 
     <xsl:text> </xsl:text> 
     <xsl:value-of select="substring(., 1, 4)" /> 
    </xsl:copy> 
</xsl:template> 
関連する問題