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

基于Saxon HE 10.6使用XSLT 3.0 xsl:mode实现XML元素过滤的问题

问题根因

你的初始脚本存在三个核心问题:

  • on-no-match="shallow-skip"配置下,根节点<bill>无匹配模板直接被跳过,导致无任何输出
  • 匹配规则item/*[status=0]和空模板组合,效果是删除符合条件的节点,与保留目标节点的需求完全相反
  • 未声明XSLT命名空间,部分场景下会导致解析异常

正确实现

直接用以下简洁的XSLT 3.0脚本即可实现需求:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:mode on-no-match="shallow-copy" />
  <!-- 匹配所有不满足条件的item节点,直接跳过不输出 -->
  <xsl:template match="item[not(shoes/status = 0)]" />
</xsl:stylesheet>

逻辑说明

  • on-no-match="shallow-copy" 会让所有未显式匹配的节点执行浅拷贝:复制当前节点本身,继续递归处理子节点,保证原XML结构完整保留
  • 显式声明的模板仅匹配shoes/status值不等于0的item节点,空模板表示直接丢弃这些节点及其子内容,无需额外处理
  • 你当前使用的BasicTransformerFactory初始化方式完全兼容该脚本,无需修改Java端代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:08