XPath для поиска элементов, у которых нет идентификатора или класса

88

Как я могу получить все элементы tr без атрибута id?

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

Благодарность

Приянк
источник

Ответы:

147

Довольно просто:

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

Это даст вам все trэлементы , отсутствующие как idи classатрибуты. Если вы хотите, чтобы во всех trэлементах отсутствовал один из двух, используйте orвместо and:

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

Когда атрибуты и элементы используются таким образом, если атрибут или элемент имеют значение, они обрабатываются как истинные. Если он отсутствует, он рассматривается как ложный.

Велбог
источник
22

Если вы ищете элемент, который имеет класс, aно не имеет класса b, вы можете сделать следующее.

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

Или, если вы хотите убедиться, что не совпадают частичные.

//*[contains(concat(' ', normalize-space(@class), ' '), ' some-class ') and 
not(contains(concat(' ', normalize-space(@class), ' '), ' another-class '))]
Miphe
источник
9

Ты можешь попробовать //tr[not(@id)]?

vtd-xml-author
источник
-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 + ']'); 
    }
Ом Пракаш
источник