2009-09-28 11 views
3

Quelqu'un peut-il me dire s'il est possible de sélectionner uniquement les divs 2a et 2b à partir de ce fragment html? le problème est que les divs ne sont pas enfants de l'élément h4 et donc la requête xpath devrait dire comme "obtenir les divs qui sont entre le h4 = 'Two' et le h4 qui est juste après h4 = 'Two' note que je veulent que la requête soit dynamique et u lui dire l'élément de départ (= « Deux » h4) et l'élément d'extrémité (tout h4), puis sur lequel filtre pour obtenir les éléments entre.Xpath Obtenir des éléments qui se trouvent entre 2 éléments

<h4>One</h4> 
<div>1a</div> 
<div>1b</div> 
<div>1c</div> 
<h4>Two</h4> 
<div>2a</div> 
<div>2b</div> 
<h4>Three</h4> 
<div>3a</div> 
<div>3b</div> 
<div>3c</div> 
+2

XPath 1.0 ou 2.0? –

Répondre

9
div[preceding-sibling::h4[1] = 'Two'] 
+0

Je pense que cela aura aussi des éléments 3a, 3b, 3c J'ai besoin seulement des éléments 2a et 2b aussi qu'est-ce que cela [1] dans le h4 [1] veux dire? – Karim

+3

'previous-sibling :: h4 [1]' désigne le _first_ précédant 'h4'. Par conséquent, pour 3a/3b/3c, ce sera «

trois

», c'est pourquoi ils n'apparaîtront pas dans le résultat. Notez également que cette requête sélectionne également les nœuds "à la fin" - c'est-à-dire ceux précédés de "

", mais pas suivis d'un. Si vous voulez vérifier cela, ajouter '[... et following-sibling :: h4]' au filtre devrait faire l'affaire. –

5
div[preceding-sibling::h4='Two' and following-sibling::h4='Three'] 
+1

cela fonctionnera mais j'ai besoin d'être générique. je veux dire son ok que le frère précédent est recherché par le texte 'deux' mais j'ai besoin de la charge suivante pour être une fin

et non filtrée par le texte – Karim

Questions connexes