xpath: выбрать всех братьев и сестер без заданного элемента? - PullRequest
1 голос
/ 15 ноября 2010
<html> 
<body> 
<div id="products"> 
<h1>text1</h1> <b> description1 </b> <i>foo</i>
<h1>text2</h1> <b> description2 </b> 
<h1>text3</h1> 
<h1>text4</h1> <b> description4 </b> 
</div> 
</body> 
</html>

//h1[not(following-sibling::*[1][self::b])] выбирает заголовок text3.

<i>foo</i> может быть в любом положении!Это не всегда может быть в позиции, описанной выше.

Я хочу выбрать элемент h1, который не имеет foo, поэтому я должен получить

text2,text3,text4

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Используйте этот запрос XPath:

//h1[following-sibling::h1/following-sibling::i] | //h1[preceding-sibling::i]

0 голосов
/ 15 ноября 2010

Что касается моего комментария, вы могли бы сделать следующее:

//i[contains(.,'foo')]/following-sibling::h1

или даже

//*[contains(.,'foo')]/following-sibling::h1

Обновление: Если вы считаете предыдущий h1 тем, который "содержит" foo, вы можете сделать это:

//*[contains(., 'foo')]/(following-sibling::h1 | remove(preceding-sibling::h1, 1)))

это работает, например,

<h1>text1</h1> <b> description1 </b> 
<h1>text2</h1> <b> description2 </b> <i>foo</i>
<h1>text3</h1> 
<h1>text4</h1> <b> description4 </b> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...