2016-12-27 42 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> 
相關問題