2016-11-15 4 views
0

XPath Я знаю, что есть tousands простого вопроса о XPath, но я не получаю то, как объединить два не слишком простые выражения ...поиск XPath для класса и текста - объединить два селектора

Моя XML-структура:

<div class="some-container"> 
    <div class="btn btn-blue"> 
     <div class="btn-text"><!-- Select by class --> 
      <span> <!-- Select by text--> 
       Download 
      </span> 
     </div> 
    </div> 
</div> 

Выбор по классу

Я знаю, достиг выбрать DIV с помощью функции поиска после класса:

//*/div[contains(concat(' ', @class, ' '), ' btn-text')] 

Выбор по тексту

Чтобы выбрать также срок я знаю, я могу просто добавить /span но я хочу, чтобы выбрать по тексту. Для этого USECASE я получил XPath (form here):

//*/text()[normalize-space(.)='Download']/parent::* 

Те Селектор как работают должным образом, но я хочу, чтобы объединить их

  1. Поиск по классу "БТН"
  2. Поиск для текста внутри пролета, который точно соответствует

Я пробовал чтобы Concat как это, но что не работают test-example:

//div[contains(concat(' ', @class, ' '), ' btn-text')]/text()[normalize-space(.)='Download']/parent::* 

даже если бы там работать не выбирающий по поверочного теге

Любой, кто может помочь?

+0

'// сНу [@class = 'БТН-текст']/SPAN [текст () = 'Скачать'] '? – sideroxylon

ответ

1

Ваш XPath ищет текстовый узел непосредственно внутри div, но текстовый узел, который вы ищете, находится внутри span. Вот почему это не удается.

Чтобы заставить его работать, просто изменить XPath искать span, а не текстовый узел:

//div[contains(concat(' ', @class, ' '), ' btn-text ')]/span[normalize-space(.)='Download'] 
Смежные вопросы