Non hai una logica del genere in XPath, ma potresti essere in grado di fare qualcosa di simile a quello che desideri.
Se si desidera selezionare //table/tr/td[2]/a
ma solo se ha un img[@class='special']
in esso, quindi è possibile utilizzare //table/tr/td[2]/a[img[@class='special']]
.
Se si desidera selezionare un altro nodo in qualche altra circostanza, si potrebbe sindacali due percorsi (l'operatore |
), e solo fare in modo che ognuno ha un filtro (entro []
) che è escludono a vicenda, come avere un essere un percorso e l'altro è not()
di quel percorso. Darei un esempio, ma non sono sicuro di quale "altro nodo casuale" vorresti ... Forse potresti chiarire?
L'elemento chiave è pensare a XPath come a un linguaggio di query, non a una procedura, quindi è necessario pensare a selettori e filtri su di essi, che è un modo piuttosto diverso di pensare ai problemi rispetto alla maggior parte dei programmatori a. Ma il fatto che i filtri non debbano essere specificamente correlati al selettore (si può avere un filtro che inizia a guardare la radice del documento, ad esempio) porta ad alcune potenti possibilità (se difficili da leggere).
fonte
2012-11-27 02:29:32
grazie per la risposta. Fondamentalmente sto provando a controllare un percorso profondo come '// div/div/table/tr/td [2]/a/img [@ class =' special ']' e se esiste recupera i dati dallo stesso percorso ma un pochi passi indietro: '// div/div/table/tr/td [2]/a' e NON elementi che non hanno una classe 'speciale' applicata al loro figlio:
. –
AnchovyLegend
Quindi penso che // // table/tr/td [2]/a [img [@ class = 'special']] 'che ho menzionato sia il tipo di cosa che stai cercando. Ottiene solo gli elementi 'a' che hanno un elemento' img' che hanno una classe 'speciale'. –