У меня есть узел "foobar", выбранный с помощью:
//*[normalize-space(text())='foobar']
Но я не могу выбрать прародителя tr и выбрать из него прадеда "foobar".
Я предполагаю, что вы хотите выбрать элемент, строковое значение которого (после нормализации) равно "foobar", начиная с верхнего элемента tr
.
Вот одно выражение XPath, которое "начинается"из верхнего элемента tr
и выбирает нужный элемент:
/tr//*[normalize-space()='foobar']
Если вам нужно выбрать сам текстовый узел (не его родительский элемент):
/tr//text()[normalize-space()='foobar']
Если вы хотитечтобы избежать дорогостоящей и медленной оценки сокращения //
(поскольку вы знаете структуру документа), используйте это выражение:
/tr/td/div[normalize-space()='foobar']
или даже:
/tr/td[2]/div
Обновление :
Теперь ОП изменил свой вопрос и хочет выбрать элемент input
из div
, который имеет нормализованное строковое значение 'foobar'.
Вот выражение XPath, выбирающее именно это :
../..//input
или
../../td[1]/div/input
Do note : Если эти выражения не выбирают ни одного узла, наиболее вероятно, что документ имеет пространство имен по умолчанию - поиск пространства имен XPath по умолчанию - естьмного хороших ответов на эту проблему - здесь, в SO и в Интернете.