Como usar "not" no xpath?


164

Eu quero escrever algo do tipo:

//a[not contains(@id, 'xx')]

(ou seja, todos os links que contêm o atributo 'id' não contêm a sequência 'xx')

Não consigo encontrar a sintaxe correta.

Respostas:


241

not () é uma função no xpath (ao contrário de um operador), portanto

//a[not(contains(@id, 'xx'))]

existe uma maneira de dizer pegar todas as tags <p>, mas não a tag <a> dentro delas? imagine algo como <p> texto texto <a class="x"> TEXTO </a> texto texto </p>. Eu quero todo o texto em p, mas não o texto em a. isso é possível com o XPath? Este não é exatamente o meu caso, é um pouco mais complicado do que isso, mas é mais ou menos o mesmo.
Ali


13

Nenhuma dessas respostas funcionou para mim em python. Eu resolvi com isso

a[not(@id='XX')]

Além disso, você pode usar ou condicionar no seu xpath pelo |operador. Tal como

a[not(@id='XX')]|a[not(@class='YY')]

Às vezes queremos um elemento que não tem classe. Então você pode fazer como

a[not(@class)]

1

Use boolean functioncomo abaixo:

//a[(contains(@id, 'xx'))=false]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.