2016-12-27 62 views
0

以下是我的格式化日期的模板。是否可以将XSLT模板添加到两个不同的节点?

<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" /> 

下面是相应的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

什么是您的XML是什么样子?只是为了提供一个完整的[mcve]? – zx485

+0

提供所需的输出可能有助于回答您的问题。 – zx485

回答

1

使用

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

或者,如果你想让它更一般的,请尝试使用命名模板

<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> 
相关问题