Questo è per XPath 1.0. Se il tuo ambiente supporta XPath 2.0, vedi qui .
Sì. Possibile, ma non bello.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Questo funzionerebbe per le stringhe di ricerca in cui l'alfabeto è noto in anticipo. Aggiungi i caratteri accentati che ti aspetti di vedere.
Se puoi, contrassegna il testo che ti interessa con altri mezzi, come racchiuderlo in una <span>che ha una certa classe durante la creazione dell'HTML. Tali cose sono molto più facili da individuare con XPath rispetto alle sottostringhe nel testo dell'elemento.
Se questa non è un'opzione, puoi lasciare che JavaScript (o qualsiasi altro linguaggio host che stai utilizzando per eseguire XPath) ti aiuti a creare un'espressione XPath dinamica:
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')]"
(Punta di cappello alla risposta di @ KirillPolishchuk - ovviamente devi solo tradurre quei caratteri che stai effettivamente cercando .)
Questo approccio funzionerebbe per qualsiasi stringa di ricerca, senza richiedere una conoscenza preliminare dell'alfabeto, il che è un grande vantaggio.
Entrambi i metodi precedenti falliscono quando le stringhe di ricerca possono contenere virgolette singole, nel qual caso le cose si complicano .