Nokogiri: Как вы можете исключить атрибуты HTML с определенными именами классов? - PullRequest
2 голосов
/ 02 марта 2012

Если я хочу проанализировать HTML-блок, используя Nokogiri в Ruby, например:

<th class="first">ancd</th>
<th>xyz</th>
<th>sdf</th>

Как исключить тег, содержащий определенное имя класса? «первый» в этом случае.

1 Ответ

7 голосов
/ 02 марта 2012

Вы можете использовать селекторы CSS:

doc.css('th:not(.first)')

В этом простом случае вы также можете использовать xpath:

doc.xpath('//th[not(@class="first")]')

Разница в том, что xpath требует точного совпадения в имени класса. Если у вас была возможность иметь несколько классов, например, <th class="red first"> тогда селектор CSS его идентифицирует, а xpath - нет (без усложнения).

Редактировать: просто для справки, если вы хотите, чтобы xpath мог выбрать класс, когда в элементе может быть несколько классов:

doc.xpath('//th[@class and contains(concat(" ",normalize-space(@class)," "), " first ")]')

Обычно XPath намного более гибок, чем селекторы CSS, но это крайний случай HTML, который предпочитает CSS.

...