2012-06-15 9 views
5

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?

+0

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

+0

@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

+1

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. –

risposta

7

Prova questo:

//td[contains(font/text()[1], 'Showing ')] 
+1

Grazie Kirill. Funziona, ma solo se è il primo nodo di testo che corrisponde. Voglio trovare un 'td' dove qualsiasi' font/text() 'contiene la stringa data. – Borodin

+0

@Borodin Si intende in questo modo: '// td [contiene (font/text(), 'Showing')]'? – toniedzwiedz

+0

@Borodin, Secondo spec. XPath, se un argomento non è di tipo 'stringa', viene prima convertito in una stringa usando la funzione' stringa() 'e quindi viene valutato il risultato di tale conversione. Quindi il tuo motore XPath non funziona correttamente. –

Problemi correlati