Dotyczy to XPath 1.0. Jeśli Twoje środowisko obsługuje XPath 2.0, zobacz tutaj .
Tak. Możliwe, ale nie piękne.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
To zadziała w przypadku ciągów wyszukiwania, w przypadku których alfabet jest wcześniej znany. Dodaj znaki akcentowane, które spodziewasz się zobaczyć.
Jeśli możesz, oznacz tekst, który Cię interesuje, innymi sposobami, na przykład umieszczając go w elemencie, <span>
który ma określoną klasę podczas tworzenia kodu HTML. Takie rzeczy są znacznie łatwiejsze do zlokalizowania za pomocą XPath niż podciągi w tekście elementu.
Jeśli to nie jest możliwe, możesz pozwolić JavaScript (lub jakiemukolwiek innemu językowi hosta, którego używasz do wykonywania XPath), aby pomóc Ci w tworzeniu dynamicznego wyrażenia 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");
(Wskazówka dotycząca kapelusza do odpowiedzi @ KirillPolishchuk - oczywiście wystarczy przetłumaczyć tylko te znaki, których faktycznie szukasz ).
Takie podejście zadziałałoby dla dowolnego ciągu wyszukiwania, bez konieczności wcześniejszej znajomości alfabetu, co jest dużym plusem.
Obie powyższe metody zawodzą, gdy ciągi wyszukiwania mogą zawierać pojedyncze cudzysłowy, w takim przypadku sprawy stają się bardziej skomplikowane .