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

XSLT如何按国籍条件为人员姓名设置不同HTML显示颜色

解决方案

你可以通过为每个国籍分组生成唯一的颜色值,再给姓名包裹带style属性的span标签实现需求,下面是两种常用实现方式:


方式1:自动按分组顺序生成不同颜色(无需预定义映射,适配任意数量国籍)

利用HSL颜色模式,根据分组的position()值动态调整色相,自动为每个国籍分配区分度高的不同颜色,修改后的模板代码如下:

<xsl:template match="list">
    <html>
        <body>
           <xsl:for-each-group select="group/person" group-by="@nat">
              <!-- 动态生成HSL颜色,色相间隔30度保证区分度 -->
              <xsl:variable name="color" select="concat('hsl(', (position() - 1) * 30, ', 80%, 40%)')"/>
              <b><xsl:value-of select="current-grouping-key()"/>: </b>
              <p>
                  <!-- 遍历当前分组的每个姓名,包裹带颜色样式的span -->
                  <xsl:for-each select="current-group()/name">
                      <span style="color: {$color};">
                          <xsl:value-of select="."/>
                      </span>
                      <!-- 非最后一项加逗号分隔 -->
                      <xsl:if test="position() != last()">, </xsl:if>
                  </xsl:for-each>
              </p>
           </xsl:for-each-group>
        </body>
    </html>
</xsl:template>

代码说明:

  • 用hsl(色相, 饱和度, 亮度)模式生成颜色,每个分组色相相差30度,保证不同国籍颜色差异明显
  • 替换原来直接用value-of批量输出姓名的逻辑,改为遍历每个姓名单独包裹带样式的span标签

方式2:预定义国籍和颜色的映射(固定国籍对应固定颜色)

如果需要特定国籍对应指定颜色,可以用<xsl:choose>做判断,示例如下:

<xsl:template match="list">
    <html>
        <body>
           <xsl:for-each-group select="group/person" group-by="@nat">
              <!-- 预定义国籍对应颜色 -->
              <xsl:variable name="nat" select="current-grouping-key()"/>
              <xsl:variable name="color">
                  <xsl:choose>
                      <xsl:when test="$nat = 'france'">#ff0000</xsl:when>
                      <xsl:when test="$nat = 'poland'">#0000ff</xsl:when>
                      <xsl:when test="$nat = 'uk'">#008000</xsl:when>
                      <xsl:otherwise>#333333</xsl:otherwise>
                  </xsl:choose>
              </xsl:variable>
              <b><xsl:value-of select="$nat"/>: </b>
              <p>
                  <xsl:for-each select="current-group()/name">
                      <span style="color: {$color};">
                          <xsl:value-of select="."/>
                      </span>
                      <xsl:if test="position() != last()">, </xsl:if>
                  </xsl:for-each>
              </p>
           </xsl:for-each-group>
        </body>
    </html>
</xsl:template>

两种方式都可以实现需求,可根据是否需要固定国籍对应固定颜色自行选择。


内容的提问来源于stack exchange,提问作者user7233170

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03