используя узел, чтобы выбрать прародителя, чтобы выбрать одного из его потомков - PullRequest
1 голос
/ 13 апреля 2011

У меня есть дерево, похожее на это:

         tr
        _|_
       td  td
      _|    |_
     div     div
     _|       |_ 
 input       "foobar"

Я выбрал узел "foobar", используя:

//*[normalize-space(text())='foobar']

Но я не могу выбрать прародителя tr и выберите великого великого ребенка input с ним. Любые предложения?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

У меня есть узел "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 и в Интернете.

0 голосов
/ 13 апреля 2011

Это выражение XPath выбирает каждый элемент , имеющий нисходящий текстовый узел , равный "foobar" после нормализации пробелов:

//*[.//text()[normalize-space()='foobar']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...