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

如何在XSLT中分割字符串并避免生成空NP元素?

XSLT按双引号分割字符串避免生成空NP元素的解决方案

问题原因

当前代码的逻辑会将双引号之间的所有内容(包括纯空白内容)都识别为有效tag,当输入中出现"{equal}" "{test2}"这类相邻双引号中间仅存在空格的场景时,就会生成仅包含空白的<NP>元素。

修正方案

仅需在输出<NP>元素前增加纯空白过滤逻辑即可,修改后的模板代码如下:

<xsl:template name="SplitString">
  <xsl:param name="text" select="''" />

  <xsl:variable name="tag"  select="substring-before(substring-after($text, '&quot;'), '&quot;')" />
  <xsl:variable name="Remainder" select="substring-after($text, '&quot;')" />

  <xsl:choose>
    <!-- 仅当tag去除前后空白后不为空时,才生成NP元素 -->
    <xsl:when test="$tag != '' and normalize-space($tag) != ''">
      <NP>
        <!-- 若需要保留tag原始空白格式,直接替换为$tag即可 -->
        <xsl:value-of select="normalize-space($tag)" />
      </NP>
    </xsl:when>
  </xsl:choose>

  <!-- 剩余内容还存在双引号时才继续递归,避免无效遍历 -->
  <xsl:if test="$Remainder != '' and contains($Remainder, '&quot;')">
    <xsl:call-template name="SplitString">
      <xsl:with-param name="text" select="$Remainder" />
    </xsl:call-template>
  </xsl:if>
</xsl:template>

补充说明

normalize-space()是XSLT内置函数,会自动去除字符串前后的空白,同时将中间连续的多个空白合并为单个空格。如果你只需要过滤全空白内容、不需要修改非全空白tag的内部格式,仅保留判断条件里的normalize-space($tag) != ''即可,<xsl:value-of>直接输出$tag。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:03