Це для XPath 1.0. Якщо ваше середовище підтримує XPath 2.0, дивіться тут .
Так. Можливо, але не красиво.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Це буде працювати для пошукових рядків, де алфавіт відомий заздалегідь. Додайте будь-які символи з наголосом, які ви очікуєте бачити.
Якщо можете, позначте текст, який вас цікавить, іншими способами, наприклад, вкладіть його в текст, <span>
який має певний клас під час побудови HTML. Такі речі набагато легше знайти за допомогою XPath, ніж підрядки в тексті елемента.
Якщо це неможливо, ви можете дозволити JavaScript (або будь-якій іншій хост-мові, яку ви використовуєте для запуску XPath) допомогти вам у створенні динамічного виразу XPath:
function xpathPrepare(xpath, searchString) {
return xpath.replace("$u", searchString.toUpperCase())
.replace("$l", searchString.toLowerCase())
.replace("$s", searchString.toLowerCase());
}
xp = xpathPrepare("//text()[contains(translate(., '$u', '$l'), '$s')]", "Test");
// -> "//text()[contains(translate(., 'TEST', 'test'), 'test')]"
(Підказка щодо відповіді @ KirillPolishchuk - звичайно, вам потрібно перекласти лише ті символи, яких ви насправді шукаєте .)
Такий підхід буде працювати для будь-якого рядка пошуку, не вимагаючи попереднього знання алфавіту, що є великим плюсом.
Обидва вищезазначені методи не вдаються, коли рядки пошуку можуть містити одинарні лапки, і в цьому випадку все ускладнюється .