You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:01:23