sto codifica alcuni Perl per usare XPath per individuare un particolare td
elemento all'interno di una table` che sembra simile a questaXPath espressione per contenere elemento di un dato nodo di testo
<table>
<tr>
<td>...</td>
<td><font color="white" face="verdana, Helvetica, Arial" size="2">Showing <b>1</b>-<b>100</b> of <b>200</b> total</font></td>
<td>...</td>
<td>...</td>
</tr>
</table>
Quello che voglio è quello di trovare un Elemento td
con un nodo font/text()
che contiene la stringa Showing
.
partite contains(., "Showing")
Un confronto diretto funziona bene:
//td[font/text()="Showing "]
ma voglio utilizzare la funzione XPath in modo che la partita è più flessibile.
ho cercato
//td[contains(font/text(), "Showing ")]
ma questo solleva l'errore
XPath failed due to: A sequence of more than one item is not allowed as the first argument of contains()
e sono riuscito a ottenere quello che voglio con
//td[font/text()[contains(., "Showing")]]
ma questo è molto brutto e mi sto sperando in qualcosa di più conciso. Per favore qualcuno può migliorare questo per me, o forse confermare che questo è il modo migliore e più conciso?
più conciso? Hai un xpath che dice "Tutti' td's che hanno un 'font' il cui testo contiene' Showing' "- che è esattamente la tua affermazione sul problema! - e vuoi che sia più conciso ?! – AakashM
@AakashM: Sì, sì. Solo perché è * un * modo di esprimere ciò che voglio non significa che sia * più pulito *. Non devo scrivere '//td[font/text()[.="Show"]] 'quindi ho pensato che potrebbe esserci un modo per usare' contains' invece di '='. – Borodin
Allora perché pensi che l'espressione sia "molto brutta"? È quello che userei - e questo significa che, almeno a mia conoscenza, non ce n'è uno più elegante. –