2012-06-12 2 views
3

Как выбрать весь узел p до узла div?Xpath Выберите узел до тега

<div> 
<div>blbaba</div> 
<p>a</p> 
<p>b</p> 
<p>c</p> 
<p>d</p> 
<div>blbaba</div> 
<p>e</p> 
<p>f</p> 
<p>g</p> 
<p>h</p> 
<div>blbaba</div> 
</div> 

Я хочу а, б, в, г или д, е, ж, з я пытался что-то вроде: // DIV/Следующий :: P [предшествующий-собрата :: DIV [1]]

ответ

2

Использование:

/div/div/following::p[count(preceding::div) = 1] 

получить p после 1-го div и до 2-й . Заменить 1 в выражении с 2, чтобы выбрать p после 2 div и до 3 rd.

+0

если мои текущие node - это второй div, и я хочу, чтобы это не работало, потому что count (previous :: div) = 1 получает первый div, а не следующий div – zedouard

4

//div/following-sibling::p[preceding::div] должен получить вас все p (a,b,c,d, e,f,g,h) Если div содержит в себе различный текст, вы можете добавить некоторые условия. Например, получение только a, b, c, d в приведенном ниже примере будет: //div[text()='a']/following-sibling::p[preceding::div]

Если у вас есть класс, категория или что-то еще, что может отличить div (например, класс в примере): //div[@class='peach']/following-sibling::p[preceding::div]

<div> 
<div class='peach'>a</div> 
<p>a</p> 
<p>b</p> 
<p>c</p> 
<p>d</p> 
<div id='abc_123132' >b</div> 
<p>e</p> 
<p>f</p> 
<p>g</p> 
<p>h</p> 
<div>c</div> 
</div> 

Последний пример: ваш код будет сгенерирован автоматически, и вы узнаете только часть некоторого атрибута для div. В приведенном выше примере, вы можете выбрать E, F, G, H, как это:

//div[contains(@id,'abc')]/following-sibling::p[preceding::div] получает все родственный р, которые являются после DIV с идентификатором, который содержит «ABC» и предшествует другой DIV

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