92 votes

XPath : trouver l'URL d'un lien à partir du texte du lien

Je suis bien formé XHTML page. Je veux trouver l'URL de destination d'un lien lorsque j'ai le texte qui est lié.

Exemple

<a href="http://stackoverflow.com">programming questions site</a>
<a href="http://cnn.com">news</a>

Je veux un XPath une expression telle que, si on lui donne programming questions site il donnera http://stackoverflow.com et si je le donne news il donnera http://cnn.com .

149voto

Badaro Points 1746

Cela devrait être quelque chose de similaire à :

//a\[text()='text\_i\_want\_to\_find'\]/@href

78 votes

Est-ce que j'apprendrai un jour xpath ? quand je vois une requête, c'est tellement évident et facile à comprendre... mais je ne suis jamais capable d'en écrire une par moi-même

4 votes

Si vous lisez ceci, le cours gratuit Introduction aux bases de données de Stanford comporte une bonne section sur XML et XPath.

4 votes

Au lieu de text(), vous pouvez utiliser ".=", par exemple //a[.='Register here']

79voto

MaDeuce Points 219

Trop tard pour vous, mais pour tous ceux qui se posent la même question...

//a[contains(text(), 'programming')]/@href

Bien entendu, la "programmation" peut être n'importe quel fragment de texte.

1 votes

Celui-ci est plus généraliste. Bonne part

0 votes

C'est sensible à la casse. Je peux ignorer la casse ici ?

9voto

Brian Agnew Points 143181
//a[text()='programming quesions site']/@href

qui identifie essentiellement un nœud d'ancrage <a> qui contient le texte que vous voulez, et extraire l'élément href attribut.

6voto

Brian Travis Points 171

Considérez la phrase entre crochets comme une clause WHERE en SQL.

Cette requête dit donc "sélectionner l'attribut "href" (@) d'une balise "a" qui apparaît n'importe où (//), mais uniquement lorsque (la phrase entre crochets) le contenu textuel de la balise "a" est égal à "site de questions de programmation"".

0 votes

Bonjour Peter, avez-vous un site de tutoriel pour apprendre les requêtes xpath ?

4voto

Abdo Points 3360

Pour les contenus non sensibles à la casse, utilisez ce qui suit :

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href

translate convertit les lettres majuscules de PROGRAMMING en minuscules de programmation.

0 votes

N'ajoutez pas de "merci" comme réponses. Investissez un peu de temps dans le site et vous gagnerez suffisamment privilèges pour upvoter les réponses que vous aimez, ce qui est la façon dont Stack Overflow vous remercie.

5 votes

"Merci" n'était pas ma "réponse". Je donnais, en quelque sorte, du crédit à une réponse ci-dessus que j'ai améliorée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X