Dies ist für XPath 1.0. Wenn Ihre Umgebung XPath 2.0 unterstützt, lesen Sie hier .
Ja. Möglich, aber nicht schön.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Dies würde für Suchzeichenfolgen funktionieren, bei denen das Alphabet vorher bekannt ist. Fügen Sie alle Zeichen mit Akzent hinzu, die Sie erwarten.
Wenn Sie können, markieren Sie den Text, der Sie interessiert, mit anderen Mitteln, z. B. indem Sie ihn <span>
beim Erstellen des HTML- Codes in einen Text einschließen , der eine bestimmte Klasse hat. Solche Dinge sind mit XPath viel einfacher zu finden als Teilzeichenfolgen im Elementtext.
Wenn dies keine Option ist, können Sie JavaScript (oder eine andere Hostsprache, mit der Sie XPath ausführen) beim Erstellen eines dynamischen XPath-Ausdrucks unterstützen:
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')]"
( Hutspitze zu @ KirillPolishchuks Antwort - natürlich müssen Sie nur die Zeichen übersetzen, nach denen Sie tatsächlich suchen .)
Dieser Ansatz würde für jede Suchzeichenfolge funktionieren, ohne dass Vorkenntnisse des Alphabets erforderlich sind, was ein großes Plus ist.
Beide oben genannten Methoden schlagen fehl, wenn Suchzeichenfolgen einfache Anführungszeichen enthalten können. In diesem Fall werden die Dinge komplizierter .