2017-02-08 4 views
1

У меня есть страница, которая выглядит примерно так:XPath - драфт на основе другого ребенка родительского узла

<div> 
    <div> 
     <div> 
      <span class="span class one"> 
       some text 
      </span> 
     </div> 
    </div> 
    <div> 
     <div> 
      <span class="span class two"> 
       span i want to pick 
      </span> 
     </div> 
    </div> 
</div> 

Я хочу, чтобы выбрать <span class="span class two"> текстового Thats в <span class="span class one">. Я не уверен, что это возможно. Количество элементов не одинаково в каждой части дерева.

+0

Привет, не могли бы вы представить более представительный пример? В настоящее время ваш пример не представляет собой ваш последний оператор, который представляет собой «Количество элементов не одинаково в каждой части дерева». – becixb

ответ

1

После может быть альтернативный ответ -

//span[normalize-space(text())='some text']/../../following-sibling::div//span 

Объяснение: -

//span[normalize-space(text())='some text'] используется, чтобы найти калибровочный тег с необходимыми реквизитами

/../.. переместится в родительский элемент контекстного узла

/following-sibling::div//span найдет метку span который в родственный элемент родителя div

0

Вы можете выбрать элемент по значению атрибута класса с:

//span[@class='span class two'] 
0
//span[contains(., "some text")]/following::span 

из:

Element='<span class="span class two"> 
       span i want to pick 
      </span>' 
0

Попробуйте так, как вы были упомянуты, что вы хотите создать xpath, а также span class one

//span[text()= 'some text']/following::span[@class='span class two'] 

Пояснение xpath: - Используйте метод text вместе с тегом <span> и перейдите по другому знаку <span>, используя following keyword.

+0

Мое объяснение кода «помогло» вам? если это так, пожалуйста, отметьте этот ответ как «Принято» –

0

я, возможно, уже понял это по-другому, но я буду стараться выдать другой ответ: //span[contains(text(),(//span[@class='span class one']/text())) and not(@class='span class one')]

, что означает:

//span[contains(text(), - вы ищете пролет элемент, который содержит некий текст

(//span[@class='span class one']/text())) - что текст любого текста в классе поверочных один

and not(@class='span class one')] - но элемент диапазона не должен быть классом пролета

, конечно, вы можете заменить text() на другое свойство, такое как класс или имя или что-то еще ... например. //span[contains(@class,(//span[@class='span class one']/text()))]

+0

Это также хорошее решение. Я не тестировал его, но он выглядит довольно умным. –

Смежные вопросы