下面是我格式化日期的模板。
<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 :(得分: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>