2011-11-02 3 views
-4

Possible en double:
xpath select elements between two nodescomment sélectionner des éléments entre deux balises

basé sur ce html je besoin de deux expressions XPath:

<table dir = "rtl ......."> 
<tbody> 
<script src = "get.aspx?type=js&file=ajax&rev=3"......> 
<script language = "JavaScript" src = "get.aspx?type=js&file=mc&rev=6"></script> 
<script>..</script> 
<tr> 
<td class = "d2"...>..</td> 
</tr> 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- first expression should select these elements 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr> 
<td class = "d2"...>..</td> 
</tr> 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- second expression should select these elements 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
<tr>..</tr> <-- 
</tbody> 

comment je peux tout sélectionner <tr> éléments après le premier tag <td class = "d2"...> avec une expression xpath et tous <tr> éléments après la deuxième balise <td class = "d2"...> avec une autre expression xpath.

+0

@Oded je veux seulement retourner le compte de ces éléments pour faire quelque chose. – NouNou

+0

Vous n'avez pas répondu à ma question. Qu'avez-vous essayé? Quel xpath avez-vous essayé? – Oded

+0

Je suis en train de jouer une application iphone et créer une tableView avec des sections et pour chaque section je dois définir le nombre de ligne dans la section à une valeur spécifique et parce que j'ai besoin de compter ces éléments .J'utilise HPPLE pour analyser html. – NouNou

Répondre

0

Vous pouvez prendre l'intersection de deux séquences de noeuds dans XPath 2.0 comme si

//table/tbody/tr[td/@class = 'd2'][1]/following-sibling::tr except //table/tbody/tr[td/@class = 'd2'][2]/following-sibling::tr 

Dans cette expression, vous obtiendrez tous les frères et sœurs tr qui suivent le tr qui contient la première td de classe d2, et puis retirez ceux qui sont après le second tel tr.

Malheureusement, XPath 1.0 n'a pas le concept d'une intersection de deux ensembles de nœuds. Cependant, vous pouvez obtenir les syndicats de deux ensembles de nœuds dans XPath 1.0 comme ceci:

//table/tbody/tr[td/@class = 'd2'][1]/following-sibling::tr | //table/tbody/tr[td/@class = 'd2'][2]/preceding-sibling::tr 

Le chemin suivant vous obtiendrez les nœuds tr après la deuxième tr qui contient une td de classe d2

//table/tbody/tr[td/@class = 'd2'][2]/following-sibling::tr 
+0

J'utilise xpath 1.0 – NouNou

+0

J'ai mis à jour la réponse pour montrer un chemin alternatif lors de l'utilisation de XPath 1.0 – Mjonir74

+0

@ Mjonir74 merci de votre travail. – NouNou

Questions connexes