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

如何在XSL中检测选择/块无文本节点时显示‘无结果’

实现XSL中无文本节点时显示“无结果”的方案

要搞定这个需求,核心是通过XSL的条件判断来检测目标节点是否包含有效非空白文本,然后针对性输出内容。我结合你提供的现有代码片段,整理了两种常用的实现方式:

方式一:针对单个指定节点的判断

假设你要处理的是d:target-node这个节点(对应你代码里的d...),可以在你的<fo:block>里嵌套一个<xsl:choose>来做判断:

<xsl:choose>
  <xsl:when test="@pass='0' or @pass='1'">
    <fo:block padding-top="1cm" font-weight="bold" margin-bottom="0.2cm">Header</fo:block>
    <fo:block margin-top="0.2cm" margin-bottom="0.2cm" border-bottom="1px solid #e1e1e1"> </fo:block>
    <fo:block margin-top="0.2cm" margin-bottom="0.2cm" padding-left="5px" padding-right="5px" padding-top="1px">
      <xsl:choose>
        <!-- 用normalize-space()过滤空白字符,确保只有有效文本才显示 -->
        <xsl:when test="normalize-space(d:target-node) != ''">
          <xsl:apply-templates select="d:target-node"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>无结果</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
    </fo:block>
  </xsl:when>
  <!-- 这里可以保留你原有的xsl:otherwise逻辑(如果有的话) -->
</xsl:choose>

关键细节说明:

  • normalize-space()函数会自动去除文本前后的空白,并且把中间的连续空白合并成单个空格。如果处理后结果为空字符串,就说明目标节点没有有效可读内容(只有空格、换行这类空白字符也算“无结果”)。
  • 如果你的需求是“节点不存在时也显示无结果”,可以把判断条件改成:test="d:target-node and normalize-space(d:target-node) != ''",先判断节点存在,再检查文本有效性。

方式二:检查当前区块的整体内容

如果你的<fo:block>里可能包含多个节点,需要判断整个区块最终是否没有任何有效文本,可以直接检查当前上下文节点的内容:

<fo:block margin-top="0.2cm" margin-bottom="0.2cm" padding-left="5px" padding-right="5px" padding-top="1px">
  <xsl:choose>
    <xsl:when test="normalize-space(.) != ''">
      <!-- 正常应用模板或输出内容 -->
      <xsl:apply-templates select="d..."/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>无结果</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</fo:block>

这里的.代表当前上下文节点,normalize-space(.)会检查该节点下所有文本内容的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:38:29