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

如何使用XSLT提取XML节点中各空格分隔子串的首字母

提取XML节点文本中每个单词的首字母

我来帮你搞定这个需求!你需要把XML节点里用空格分隔的每个子串的首字母提取出来拼接,比如输入<node>This Is W3 School</node>,输出<node>TIWS</node>对吧?下面是两种实用的实现方案:

方案1:XSLT 2.0+(更简洁)

如果你的环境支持XSLT 2.0或更高版本,可以直接用tokenize函数拆分字符串,再逐个取首字母拼接:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="node">
    <xsl:copy>
      <xsl:value-of select="string-join(for $word in tokenize(., '\s+') return substring($word, 1, 1), '')"/>
    </xsl:copy>
  </xsl:template>
  
  <!-- 保留其他节点不变 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

代码解释:

  • tokenize(., '\s+'):把当前节点的文本按一个或多个空格拆分成单词列表
  • for $word in ... return substring($word, 1, 1):遍历每个单词,取第一个字符
  • string-join(..., ''):把所有首字母拼接成一个字符串

方案2:XSLT 1.0(兼容旧环境)

XSLT 1.0没有tokenize函数,我们可以用递归模板来实现拆分和提取:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="node">
    <xsl:copy>
      <xsl:call-template name="get-initials">
        <xsl:with-param name="text" select="."/>
      </xsl:call-template>
    </xsl:copy>
  </xsl:template>
  
  <!-- 递归提取首字母的模板 -->
  <xsl:template name="get-initials">
    <xsl:param name="text"/>
    <xsl:param name="delimiter" select="' '"/>
    
    <xsl:if test="$text != ''">
      <!-- 取第一个单词的首字母 -->
      <xsl:value-of select="substring($text, 1, 1)"/>
      
      <!-- 处理剩余文本:找到第一个分隔符,截取后面的部分 -->
      <xsl:variable name="remaining" select="substring-after($text, $delimiter)"/>
      <xsl:if test="$remaining != ''">
        <xsl:call-template name="get-initials">
          <xsl:with-param name="text" select="$remaining"/>
        </xsl:call-template>
      </xsl:if>
    </xsl:if>
  </xsl:template>
  
  <!-- 保留其他节点不变 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

代码解释:

  • 递归模板get-initials会反复处理文本:先取当前文本的第一个字符,然后截取第一个空格之后的剩余文本,继续递归处理,直到文本为空
  • 这个方法能兼容所有支持XSLT 1.0的旧系统

两种方案都能实现你要的效果,根据你的运行环境选就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:27