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

Я не вижу никаких подходов JOIN, которые имеют много применений с точки зрения дубликатов.

Этот подход дает вам фактические удвоенные результаты.

SELECT t1.* FROM table as t1 LEFT JOIN table as t2 ON t1.name=t2.name and t1.id!=t2.id WHERE t2.id IS NOT NULL ORDER BY t1.name
422
задан james.garriss 9 March 2016 в 13:27
поделиться

2 ответа

РЕДАКТИРОВАТЬ : см. Решение bobince, которое использует , содержит , а не start-with , а также трюк, чтобы гарантировать, что сравнение выполняется на уровень полного токена (чтобы шаблон «атаг» не был обнаружен как часть другого «тега»).

«atag btag» - нечетное значение для атрибута класса, но тем не менее попробуйте:

//*[starts-with(@class,"atag")]
38
ответ дан 22 November 2019 в 23:16
поделиться

Ответ mjv - хорошее начало, но не удастся, если atag не является первым перечисленным именем класса.

Обычный подход довольно громоздкий:

//*[contains(concat(' ', @class, ' '), ' atag ')]

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

//*[contains(concat(' ', normalize-space(@class), ' '), ' atag ')]

(Выбор по строкам, разделенным пробелами, похожим на имя класса, является настолько распространенным случаем, что удивительно, что для него нет специальной функции XPath, такой как CSS3 '[ class ~ = "atag"] '.)

298
ответ дан 22 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: