2010-04-22 14 views
15

Non so perché query seguente non funziona:query XPath per selezionare tutti gli attributi href di <a> tag, che attributo 'classe' è uguale specificato stringa

//a/@href[@class='specified_string'] 
+2

Poiché l'attributo di classe può contenere più nomi di classe separati da spazi, probabilmente si desidera effettivamente: '// a [contains (concat ('', normalize-space (@class) , ''), 'some_class_name')]/@ href' – singpolyma

+1

@singpolyma: buon punto. Solo un nitpick: è ''some_class_name'' (con spazi intorno), * not * ''some_class_name''. – kmkaplan

risposta

39

Prova ora il contrario:

//a[@class='specified_string']/@href 

Dopo tutto, class è un attributo dell'elemento <a>, non un attributo dell'attributo href.

+0

Sì, penso che funzioni, ma il problema è che la query restituisce gli attributi e voglio recuperare i valori degli attributi. Lo sto scrivendo in Java e mi ha restituito NodeList di lunghezza 2. Quando provo a stamparlo, stampa solo due intestazioni xml: < ? xml version = "1.0" encoding = "UTF-8"?> due e ci sono solo due link che la query corrisponderà, quindi sembra funzionare. Ma voglio ottenere i valori di questi hrefs. Come farlo? – l245c4l

+1

That 'NodeList' dovrebbe contenere l'elenco di' Node's che rappresenta gli attributi 'href'. Quindi, l'esecuzione di 'getNodeValue()' su quei nodi dovrebbe darti i valori di 'href' attributes. – ndim

+0

Questo non funziona nel mio caso, anche se penso che sia assolutamente giusto. Il mio Chrome può usare '// a [@ name =" topic "]' per estrarre gli elementi a destra. Ma // // a [@ name = "topic"]/@ href' restituisce una lista di [,,,,,] come se non ci fosse un attributo href.Questo è un "elemento" come esempio: XXX Skywalker326

1

In pratica si dice che si sta cercando un attributo denominato href, il cui attributo (questo è l'errore) class deve essere uguale a specified_string.

, ma è necessario trovare l'attributo href di un elemento a, il cui attributo class è specified_string.

(risposta di Ndim sovrapposta miniera)

5

Un attributo non può avere gli attributi. Solo gli elementi possono avere attributi.

L'espressione originale XPath:

//a/@href[@class='specified_string'] 

seleziona qualsiasi href attributo di qualsiasi elemento a, tale che l'attributo href ha un attributo class cui valore è 'specified_string'.

quello che vuoi è:

//a[@class='specified_string']/@href 

che è: l'attributo href di qualsiasi elemento a che ha class atribute con valore 'specified_string'.

0

Non c'è un attributo di classe presente nel tag di ancoraggio Ho solo href. Viene identificato utilizzando //*[@href='value'] ma //*a[@href='value'] non funziona

Problemi correlati