J'ai une page bien formée XHTML . Je souhaite trouver l'URL de destination d'un lien lorsque le texte associé est lié.
Exemple
<a href="http://stackoverflow.com">programming questions site</a>
<a href="http://cnn.com">news</a>
Je veux une expression XPath telle que si donné programming questions site
ça donnera http://stackoverflow.com
et si je lui donne news
cela donnera http://cnn.com
.
Devrait être quelque chose de similaire à:
// a [text () = 'text_i_want_to_find']/@ href
Trop tard pour vous, mais pour quiconque ayant la même question ...
//a[contains(text(), 'programming')]/@href
Bien entendu, la "programmation" peut être n'importe quel fragment de texte.
//a[text()='programming quesions site']/@href
qui identifie fondamentalement un noeud d'ancrage <a>
qui contient le texte souhaité et extrait l’attribut href
.
Considérez la phrase entre crochets comme une clause WHERE dans SQL.
Donc, cette requête dit "sélectionnez l'attribut" href "(@) d'une balise" a "qui apparaît n'importe où (//), mais uniquement là où (la phrase entre crochets) le contenu textuel de la balise" a "est égal à" site de questions de programmation '".
Pour les contenus insensibles à la casse, utilisez ce qui suit:
//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href
translate convertit les majuscules de PROGRAMMATION en programmation minuscule.
si vous utilisez le pack d'agilité HTML, utilisez getattributeValue:
$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")