XPath pour trouver des éléments qui n'ont pas d'identifiant ou de classe

88

Comment puis-je obtenir tous les éléments tr sans attribut id?

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

Merci

farce
la source

Réponses:

147

Assez simple:

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

Cela vous donnera tous les tréléments manquant à la fois idet les classattributs. Si vous voulez que tous les tréléments ne contiennent pas l'un des deux, utilisez à la orplace de and:

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

Lorsque des attributs et des éléments sont utilisés de cette manière, si l'attribut ou l'élément a une valeur, il est traité comme s'il était vrai. S'il manque, il est traité comme s'il était faux.

Welbog
la source
22

Si vous recherchez un élément qui a une classe amais pas de classe b, vous pouvez effectuer les opérations suivantes.

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

Ou si vous voulez être sûr de ne pas correspondre partiellement.

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

Peux-tu essayer //tr[not(@id)]?

auteur-vtd-xml
la source
-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
la source