如何在XSL中显示序数上标?技术问题咨询
在XSL中实现序数词上标显示
直接通过模板匹配数字规则,生成带<sup>标签的序数内容即可,以下是具体实现:
核心实现模板
创建一个可复用的命名模板,根据数字末尾字符判断序数后缀,并用上标标签包裹:
XSLT 2.0+ 版本
<xsl:template name="ordinal-suffix"> <xsl:param name="number" as="xs:integer"/> <xsl:variable name="last-digit" select="$number mod 10"/> <xsl:variable name="last-two-digits" select="$number mod 100"/> <!-- 输出数字本体 --> <xsl:value-of select="$number"/> <!-- 匹配序数后缀并添加上标 --> <sup> <xsl:choose> <!-- 11-13特殊处理,统一用th --> <xsl:when test="$last-two-digits >= 11 and $last-two-digits <= 13">th</xsl:when> <xsl:when test="$last-digit = 1">st</xsl:when> <xsl:when test="$last-digit = 2">nd</xsl:when> <xsl:when test="$last-digit = 3">rd</xsl:when> <xsl:otherwise>th</xsl:otherwise> </xsl:choose> </sup> </xsl:template>
XSLT 1.0 兼容版本
如果使用XSLT 1.0,去掉类型声明即可:
<xsl:template name="ordinal-suffix"> <xsl:param name="number"/> <xsl:variable name="last-digit" select="$number mod 10"/> <xsl:variable name="last-two-digits" select="$number mod 100"/> <xsl:value-of select="$number"/> <sup> <xsl:choose> <xsl:when test="$last-two-digits >= 11 and $last-two-digits <= 13">th</xsl:when> <xsl:when test="$last-digit = 1">st</xsl:when> <xsl:when test="$last-digit = 2">nd</xsl:when> <xsl:when test="$last-digit = 3">rd</xsl:when> <xsl:otherwise>th</xsl:otherwise> </xsl:choose> </sup> </xsl:template>
调用示例
在需要显示日期序数的位置,调用模板传入数字即可:
<!-- 直接传入数字 --> <xsl:call-template name="ordinal-suffix"> <xsl:with-param name="number" select="1"/> </xsl:call-template> <!-- 从XML节点中读取数字,比如<day>4</day> --> <xsl:call-template name="ordinal-suffix"> <xsl:with-param name="number" select="day"/> </xsl:call-template>
这样处理后,数字1会渲染为1st,2为2nd,3为3rd,4为4th,完全符合你需要的样式。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

