2013-05-27 4 views
0

У меня есть следующий HTML:Xpath: выберите h2 родителя, без ребенка

<div class="stack"> 
    <h2 class="overflow"> 
     <img src="http:.."> 
     text 
    </h2> 
    <div class="sublist"> 
     <table> 
     ... 
     </table> 
    </div> 

    <h2 class="overflow"> 
     <a href="http://...">link</a> 
    </h2> 
</div> 

Как вы можете видеть, .sublist ДИВ всегда следует с и какой-то текст, это как DIV является подсписка h2 (h2 - название подвыражения). В другом - якорный тег.

Я хотел бы получить все теги h2, которые предшествуют div .sublist.

Это мое текущее положение XPath:

//div[@class="stack"]/h2/*[not(descendant::a)] 

И я в конечном итоге получить различные элементы (а, ДИВ, IMG), но элементы h2.

ответ

1

Я хотел бы получить все h2 тег, которые предшествуют Диво .sublist.

Как насчет:

//div[class="sublist"]/preceding-sibling::h2 
+0

Это хорошо. Мне пришлось перейти от h2 к h2 [1], чтобы получить inmediante, предшествующую брату. – Rod0n

+0

@ Rod0n да, путь, который я дал, вернет _all_ теги h2, которые предшествуют расширению подписок. –

1

Попробуйте preceding-sibling:

//div[@class="stack"]/div[@class="sublist"]/preceeding-sibling::* 
Смежные вопросы