2016-01-17 2 views
1

Мой HTML выглядит следующим образом:Получить ребенка от его родителя другого ребенка

<div class="parent"> 
    <div class="url"> 
     <a href="http://url.com/view/12">LINK</a> 
    </div> 

    <div class="stats"> 
     <div class="a">12</div> 
     <div class="b">14</div> 
    </div> 
</div> 
<div class="parent"> 
    <div class="url"> 
     <a href="http://url.com/view/364">LINK</a> 
    </div> 

    <div class="stats"> 
     <div class="a">133</div> 
     <div class="b">13</div> 
    </div> 
</div> 
<div class="parent"> 
    <div class="url"> 
     <a href="http://url.com/view/24324">LINK</a> 
    </div> 

    <div class="stats"> 
     <div class="a">4</div> 
     <div class="b">46</div> 
    </div> 
</div> 

Возможно ли это, чтобы получить ребенка родителя, который найден другой, тот же родительский ребенка?

Итак, я хочу получить содержимое класса b второго родителя. Но я хочу найти бук, это параметр href.

Как что-

  • XPath находит родитель, у которого есть ребенок url и a с href параметром http://url.com/view/364
  • XPath принимает содержимое класса b в том же родителе

Если вы не» t понимать, мне в основном нужно, чтобы XPath получил номер 13 (содержимое b), но найдите его, используя href.

Возможно ли это? Как это можно сделать?

ответ

2

Даже более подход (разрыв строки только для удобства чтения)

//div[@class = 'parent' and div[@class = 'url'] 
/a/@href = 'http://url.com/view/364']/div[@class = 'stats']/div[@class = 'b'] 

Это лучше, чем ответ вы нашли себя (на самом деле, это хорошо, что вы нашли ответ сами!), Потому что в ней нет лишней родительской оси (..).

Это лучше, чем

(//a[@href='http://url.com/view/364']/following::div[@class='b'])[1] 

, потому что following::div[@class = 'b'] выбирает div элемент, который следует элемент контекста, даже если он находится в другом div[@class = 'parent']. Например, если документ выглядел

<html> 
<div class="parent"> 
    <div class="url"> 
     <a href="http://url.com/view/364">LINK</a> 
    </div> 

    <div class="stats"> 
     <div class="a">133</div> 
    </div> 
</div> 
<div class="parent"> 
    <div class="url"> 
     <a href="http://url.com/view/24324">LINK</a> 
    </div> 

    <div class="stats"> 
     <div class="a">4</div> 
     <div class="b">46</div> 
    </div> 
</div> 
</html> 

тогда результат будет

<div class="b">46</div> 
0

Я нашел ответ.

Это легко сделать, что -

//*[@class="parent"]/div[@class="url"]/a[@href="http://url.com/view/364"]/../../div[@class="stats"]/div[@class="b"] 
0

Ну, уборщик подход должен был бы использовать following ось, а затем выберите первый узел с class='b'.

"(//a[@href='http://url.com/view/364']/following::div[@class='b'])[1]" 
Смежные вопросы