2010-02-13 3 views
3

Désolé d'avance si je ne l'explique pas clairement. Je ferai de mon mieux pour clarifier ce que j'essaie de faire. Sans plus tarder ... Supposons que vous ayez une série de chiffres sur une page (séparés par un espace seulement) où les parenthèses indiquent la page actuelle sur laquelle vous vous trouvez.Xpath sélectionner suivant (numéro) frère à l'intérieur de l'aide de l'ancre

Il ressemble à ceci sur la page:

[1] 2 3

Le code HTML ressemble à ceci:

<tr> 
<td> 

[<a href='link1.php'>1</a>] <a href='link2.php'>2</a> <a href='link3.php'>3</a> 

</td> 
</tr> 

J'essaie simplement de sélectionner le numéro de page en fonction le courant. J'imagine que j'ai besoin d'utiliser une forme de frère suivant, mais tout ce que j'ai trouvé c'est // tr/td/a/following-sibling :: a [1], ce qui est évidemment incorrect. Il sélectionne 2 à la page 1 mais pas 3 à la page 2 comme prévu. J'aurais essayé d'utiliser [text() [contains (., '[')]] Pour sélectionner la page courante mais les crochets sont à l'extérieur de l'ancre plutôt qu'à l'intérieur. Eek !?

Il serait très apprécié si vous pouviez expliquer le processus de pensée avec votre solution au lieu de simplement coller la réponse. Dans l'attente de votre aide.

Répondre

6

La page suivante après 2, on trouvera par:

//tr/td/a[.='2']/following-sibling::a[1] 

D'abord, nous sélectionnons la page en cours en fonction de sa teneur en chaîne //tr/td/a[.='2'], et à partir de là, sélectionnez la première following-sibling.

Pour ce faire, sans connaître la page en cours, nous allons sélectionner l'élément a après le "]".

//tr/td/text()[']'=normalize-space(.)]/following-sibling::a[1] 

Et dans le cas où il n'y a pas de page en cours, nous allons utiliser par défaut le premier un élément.

//tr/td/(text()[']'=normalize-space(.)]/following-sibling::a | a)[1] 
+0

Fonctionne à merveille et prend tout son sens. Merci beaucoup. – user272492

Questions connexes