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

如何修正XSL模板中匹配值不与任何<a>元素值相等的<b>元素的XPath表达式?

修正你的XPath表达式

你找对问题点啦!原表达式. != //a的逻辑确实不对——在XPath 2.0里,当你拿当前<b>的值和节点集//a做不等于比较时,只要有一个<a>的值和它不一样,这个表达式就会返回true,这完全不是你要的「的值完全不匹配任何一个元素值」的效果。

正确的XPath表达式有两种写法,都能精准实现你的需求:

写法一(简洁常用)

b[not(. = //a)]

原理很直接:. = //a会返回true如果当前<b>的值等于任意一个<a>的值,对这个结果取反,就得到了「不等于所有值」的<b>元素。

写法二(更直白,XPath 2.0专属)

b[every $a in //a satisfies . != $a]

这是XPath 2.0的量化表达式,直白表达了「对于每一个<a>元素,当前<b>的值都不等于它」的逻辑,可读性更强。

把你的XSL模板替换成下面这样就能正常工作了:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:template match="b[not(. = //a)]">
    <xsl:text>found!</xsl:text>
  </xsl:template>
</xsl:stylesheet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:17:40