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

XSLT中匹配排除指定type属性值的c节点异常问题求解

解决XSLT模板match中排除多个属性值的问题

嗨,我懂你遇到的问题了——这其实是XPath里!=运算符和集合比较时的逻辑陷阱!

问题原因

你原来写的匹配条件:

<xsl:template match="entry/p/c[@type != ('_Table Blue grid ALL' , '_Table Light Blue grid ALL' , '_Table Light Blue')]">

在XPath中的逻辑并不是“@type不等于这三个值中的任何一个”,而是“@type不等于这三个值中的至少一个”。举个例子:

  • 对于type="_Table Light Blue grid ALL"的节点,它确实不等于_Table Blue grid ALL和_Table Light Blue,所以整个表达式返回true,会被选中;
  • 对于type="_Table Blue grid ALL"的节点,它不等于_Table Light Blue grid ALL和_Table Light Blue,表达式同样返回true,也会被选中。

这就是为什么你所有的c节点都被匹配到了。

正确解决方案

要实现“排除这三个指定type值的节点”,应该用not()配合等于判断——因为XPath中@type = ('值1','值2','值3')的逻辑是“@type等于其中任意一个值”,用not()包裹后就变成了“@type不等于这三个值中的任何一个”,完美符合你的需求:

<xsl:template match="entry/p/c[not(@type = ('_Table Blue grid ALL' , '_Table Light Blue grid ALL' , '_Table Light Blue'))]">

这样修改后,只有type属性不在你列出的三个值里的c节点才会被这个模板匹配,正好达到你想要的排除效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:00:38