XPath, um Elemente zu finden, die keine ID oder Klasse haben

88

Wie kann ich alle tr-Elemente ohne id-Attribut erhalten?

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

Vielen Dank

Priyank
quelle

Antworten:

147

Ziemlich einfach:

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

Das gibt Ihnen alle trElemente, denen sowohl idals auch classAttribute fehlen . Wenn Sie möchten, dass allen trElementen eines der beiden fehlt, verwenden Sie oranstelle von and:

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

Wenn Attribute und Elemente auf diese Weise verwendet werden und das Attribut oder Element einen Wert hat, wird es so behandelt, als ob es wahr wäre. Wenn es fehlt, wird es so behandelt, als ob es falsch wäre.

Welbog
quelle
22

Wenn Sie nach einem Element suchen, das eine Klasse hat , aaber keine Klasse hat b, können Sie Folgendes tun.

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

Oder wenn Sie sicher sein möchten, dass Sie nicht teilweise übereinstimmen.

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

Kannst du es versuchen //tr[not(@id)]?

vtd-xml-author
quelle
-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
quelle