2009-05-27 4 views

risposta

123

dovrebbe essere qualcosa di simile a:

 
//a[text()='text_i_want_to_find']/@href 
+60

imparerò mai xpath? quando vedo una query è così ovvio e facile da capire ... ma non sono mai in grado di scriverne uno da solo – flybywire

+3

@flybywire Se leggi questo corso di Introduzione al database gratuito di Stanford ha una buona sezione su XML e XPath. –

+2

Invece di text(), puoi usare ". =", Ad esempio //a[.='Registrati qui '] – danpop

8
//a[text()='programming quesions site']/@href 

che identifica fondamentalmente un nodo di ancoraggio <a> che ha il testo che si desidera, ed estrae l'attributo href.

6

Pensa alla frase tra parentesi quadre come una clausola WHERE in SQL.

Quindi questa query dice "selezionare l'attributo" href "(@) di un tag" a "che appare ovunque (//), ma solo dove (la frase tra parentesi) il contenuto testuale del tag" a " è uguale a 'sito domande di programmazione' ".

+0

Ciao Peter, hai qualche sito tutorial per imparare la query xpath? –

62

troppo tardi per voi, ma per chiunque altro con la stessa domanda ...

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

Naturalmente, 'programmazione' può essere qualsiasi frammento di testo.

+1

Questo è più generalizzato. Buona quota –

1

se si utilizza HTML agilità uso pacchetto getattributeValue:

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","") 
3

Per case insensitive contiene, utilizzare il seguente:

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

traducono converte lettere maiuscole nella programmazione per abbassare la programmazione caso.

+0

Si prega di non aggiungere "grazie" come risposta. Investi un po 'di tempo nel sito e otterrai sufficienti [privilegi] (http://stackoverflow.com/privileges) per sviare le risposte che ti piacciono, che è il modo di Overflow dello stack di dire grazie. – Sklivvz

+5

"Grazie" non era la mia "risposta". In un certo senso, ero in grado di dare credito a una risposta sopra la quale sono migliorata. – Abdo