Esto es para XPath 1.0. Si su entorno es compatible con XPath 2.0, consulte aquí .
Si. Posible, pero no hermoso.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Esto funcionaría para cadenas de búsqueda donde el alfabeto se conoce de antemano. Agregue los caracteres acentuados que espera ver.
Si puede, marque el texto que le interesa con algún otro medio, como encerrarlo en un texto <span>
que tenga una determinada clase mientras construye el HTML. Estas cosas son mucho más fáciles de localizar con XPath que las subcadenas en el texto del elemento.
Si esa no es una opción, puede dejar que JavaScript (o cualquier otro lenguaje host que esté utilizando para ejecutar XPath) lo ayude a crear una expresión XPath dinámica:
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')]"
(Sugerencia para la respuesta de @ KirillPolishchuk : por supuesto, solo necesita traducir los caracteres que está buscando ).
Este enfoque funcionaría para cualquier cadena de búsqueda, sin requerir conocimiento previo del alfabeto, lo cual es una gran ventaja.
Ambos métodos anteriores fallan cuando las cadenas de búsqueda pueden contener comillas simples, en cuyo caso las cosas se complican más .