2016-12-27 10 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>