XPath para encontrar elementos que não tenham um id ou classe

88

Como posso obter todos os elementos tr sem o atributo id?

<tr id="name">...</tr>
<tr>...</tr>
<tr>...</tr>

obrigado

brincadeira
fonte

Respostas:

147

Bem direto:

//tr[not(@id) and not(@class)]

Isso lhe dará todos os trelementos sem os atributos ide class. Se você quiser que todos os trelementos não tenham um dos dois, use em orvez de and:

//tr[not(@id) or not(@class)]

Quando atributos e elementos são usados ​​dessa forma, se o atributo ou elemento tiver um valor, ele será tratado como se fosse verdadeiro. Se estiver faltando, será tratado como se fosse falso.

Welbog
fonte
22

Se estiver procurando por um elemento que tenha classe, amas não tenha classe b, você pode fazer o seguinte.

//*[contains(@class, 'a') and not(contains(@class, 'b'))]

Ou se você quiser ter certeza de não corresponder a parcial.

//*[contains(concat(' ', normalize-space(@class), ' '), ' some-class ') and 
not(contains(concat(' ', normalize-space(@class), ' '), ' another-class '))]
miphe
fonte
9

Você pode tentar //tr[not(@id)]?

vtd-xml-author
fonte
-4
if (elm.hasAttribute('id')) { 
//if id - implement here
    } else if (elm.hasAttribute('class')) { 
        //if class - implement here
    } else { 
        for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) { 
            if (sib.localName == elm.localName)
                i++;
        }; 
        segs.unshift(elm.localName.toLowerCase() + '[' + i + ']'); 
    }
Om Prakash
fonte