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() 是一个函数,只能出现在谓词(即中括号内),作用于当前上下文节点。