xslt命名模板号总是进入xsl:否则阻塞

时间:2014-04-24 19:20:33

标签: xml xslt xpath

我有一个日期后缀功能,可以添加带有日期的st,nd,rd,th后缀

<xsl:template name="date_suffix">
    <xsl:param name="date" />
    <xsl:choose>
        <xsl:when test="$date &gt; 10 and $date &lt; 14">th</xsl:when>
        <xsl:when test="($date mod 10) = 1">st</xsl:when>
        <xsl:when test="($date mod 10) = 2">nd</xsl:when>
        <xsl:when test="($date mod 10) = 3">rd</xsl:when>
        <xsl:otherwise>th</xsl:otherwise>
    </xsl:choose>
</xsl:template>

我这样称呼它

<xsl:template match="date">
    <xsl:value-of select="." />
    <xsl:call-template name="date_suffix">
        <xsl:with-param name="date" seelect="." />
    </xsl:call-template>
</xsl:template>

这是我的XAML片段

    <dob>
        <date>23</date>
        <month>Dec</month>
        <year>1987</year>
    </dob>

问题是我看到23th而我期待23rd。当choose when直接在<xsl:template match="date">块中使用时,{{1}},{{1}}可以正常工作,但当被称为命名模板

时,它不会正常工作

2 个答案:

答案 0 :(得分:1)

尝试将seelect更改为select

答案 1 :(得分:0)

如果您不限于XSL版本1.0,那么使用具有强类型参数的函数而不是命名模板可能会有所帮助:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xyz="urn:mystuff"
version="2.0">
    <xsl:output encoding="utf-8" indent="yes" method="xml" />

    <xsl:template match="date">
        <xsl:value-of select="." />
        <xsl:value-of select="xyz:date_suffix(.)" />
    </xsl:template>

    <xsl:function name="xyz:date_suffix" as="xs:string">
        <xsl:param name="date" as="xs:integer"/>
        <xsl:choose>
            <xsl:when test="($date mod 10) = 1">st</xsl:when>
            <xsl:when test="($date mod 10) = 2">nd</xsl:when>
            <xsl:when test="($date mod 10) = 3">rd</xsl:when>
            <xsl:otherwise>th</xsl:otherwise>
        </xsl:choose>
    </xsl:function>

</xsl:stylesheet>