Это для 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");
(Подсказка к ответу @KirillPolishchuk - конечно, вам нужно перевести только те символы, которые вы действительно ищете .)
Такой подход будет работать для любой поисковой строки без предварительного знания алфавита, что является большим плюсом.
Оба приведенных выше метода не работают, если строки поиска могут содержать одинарные кавычки, и в этом случае все становится сложнее .