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

XSLT如何匹配无有效子节点的节点?(¬∃场景实现)

问题描述
  • 现有XSLT逻辑:针对每个满足@label属性存在且包含value子元素的<sample>节点,生成填充数据的<result>元素;但当没有任何符合条件的<sample>时,无任何输出。
  • 需求:需要匹配不存在任何符合perf_data/sample[@label and value]条件的节点的场景,生成错误输出(即无有效样本时执行一次错误逻辑)。
  • 尝试过的无效方案:曾编写类似<xsl:template match="[not(boolean(./sample/@label) or not(./sample/value))]">的模板,但未达到预期效果。
  • 使用工具:libxslt-tools-1.1.28中的xsltproc,版本信息:
Using libxml 20904, libxslt 10128 and libexslt 817
xsltproc was compiled against libxml 20901, libxslt 10128 and libexslt 817
libxslt 10128 was compiled against libxml 20901
libexslt 817 was compiled against libxml 20901
实现方案

基于xsltproc支持的XSLT 1.0规范,提供两种可行实现方式:

方式1:在<perf_data>模板内添加判断逻辑

先处理所有有效<sample>,再判断是否无有效样本,若满足则输出错误:

<xsl:template match="perf_data">
  <!-- 执行原有逻辑:处理所有有效sample -->
  <xsl:apply-templates select="sample[@label and value]"/>
  
  <!-- 判断无有效sample时输出错误 -->
  <xsl:if test="not(sample[@label and value])">
    <error>未找到符合条件的sample节点</error>
  </xsl:if>
</xsl:template>

<!-- 原有处理有效sample的模板 -->
<xsl:template match="sample[@label and value]">
  <result>
    <label><xsl:value-of select="@label"/></label>
    <value><xsl:value-of select="value"/></value>
  </result>
</xsl:template>

方式2:通过模板优先级实现匹配

给匹配“无有效样本的<perf_data>”的模板设置更高优先级,确保优先触发:

<!-- 匹配无有效sample的perf_data,优先级设为2(高于默认0) -->
<xsl:template match="perf_data[not(sample[@label and value])]" priority="2">
  <error>未找到符合条件的sample节点</error>
</xsl:template>

<!-- 普通perf_data模板,处理正常场景 -->
<xsl:template match="perf_data">
  <xsl:apply-templates select="sample[@label and value]"/>
</xsl:template>

<!-- 原有处理有效sample的模板 -->
<xsl:template match="sample[@label and value]">
  <result>
    <label><xsl:value-of select="@label"/></label>
    <value><xsl:value-of select="value"/></value>
  </result>
</xsl:template>
原方案失败原因

你之前编写的匹配条件存在两个问题:

  1. 逻辑表达式错误:not(boolean(./sample/@label) or not(./sample/value))等价于not(./sample/@label) and ./sample/value,和“无有效样本”的需求不符;
  2. 模板匹配未指定目标节点:必须明确匹配<perf_data>这类具体节点,不能仅写条件而不指定匹配对象。

内容的提问来源于stack exchange,提问作者U. Windl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:35:06