Вот некоторые выражения liner xpath 1.0 для IndexOf ($ text, $ searchString):
Если вам нужна позиция символа FIRST искомой строки, или 0, еслиего нет:
contains($text,$searchString)*(1 + string-length(substring-before($text,$searchString)))
Если вам нужна позиция первого символа ПОСЛЕ найденной строки, или 0 , если ее нет:
contains($text,$searchString)*(1 + string-length(substring-before($text,$searchString)) + string-length($searchString))
В качестве альтернативы, если вам нужна позиция первого символа ПОСЛЕ найденной строки, или длина + 1 , если ее нет:
1 + string-length($right) - string-length(substring-after($right,$searchString))
Это должно охватывать большинство случаев, в которых вы нуждаетесь.
Примечание: Умножение на содержит (...) приводит к преобразованию истинного или ложного результата функции contains (...) в 1 или0, который элегантно обеспечивает «0, когда не найден» часть логики.