not(@attribute)用于选取不包含指定属性的节点,语法必须为路径+[not(@属性名)],仅判断属性存在性而非值是否为空。

在XPath中,用 not(@attribute) 可以精准选取**不包含指定属性**的节点。它的核心逻辑是:对每个候选节点,检查它是否“没有这个属性”,返回 true 的节点才会被选中。
基本语法与写法
最常用的形式是:
- //*[@id and not(@class)] —— 选取有 id 属性但没有 class 属性的任意元素
- //div[not(@data-testid)] —— 选取所有不含 data-testid 属性的 div 元素
- //input[@type='text' and not(@disabled)] —— 选取 type 为 text 且未禁用(即无 disabled 属性)的 input
注意 not() 是谓词,必须放在方括号里
不能写成 //* not(@hidden) 或 //*[not @hidden] —— 这两种都语法错误。正确结构是:节点路径 + [not(@属性名)]。not() 是一个函数,只能出现在谓词(即中括号内),作用于当前上下文节点。
区分“无该属性”和“属性值为空”
not(@attr) 只判断属性是否存在,和属性值无关:
-
→ 匹配(无 @class) -
→ 不匹配(有 @class,哪怕值为空字符串) -
→ 不匹配(依然存在 class 属性)
如果想选“属性不存在或值为空”,需额外判断:[not(@class) or @class = '']。










