2009-08-23 2 views
28
<tr> 
<td>Blah!</td> 
<td>X</td> <!-- TR containing X --> 
<td>Woot!</td> 
</tr> 
<tr> 
<td>Useful Data, contents unknown</td> <!-- Select this TR --> 
</tr> 
<tr> 
<td>Useless data</td> <!-- Don't select this or any subsequent TR --> 
</tr> 
<tr> 
<td>More crap I don't want</td> 
</tr> 
<tr> 
<td>X</td> <!-- Another X --> 
</tr> 
<tr> 
<td>Useful</td> <!-- Do select this one, since previous has X --> 
</tr> 

Quale XPath restituirebbe lo <tr> immediatamente dopo lo <tr> che contiene X?Cosa XPath seleziona il prossimo <tr> dopo un <tr> contenente X?

risposta

36

Martino V di ChaosPandion e. Risposte sia lavoro per il campione si dà di Lowis, ma se si sta chiedendo per il prossimo TR, quindi presumibilmente in alcuni casi ci sono ulteriori elementi ma nello stesso tavolo. In tal caso, le risposte forniranno tutti gli elementi tr seguenti o successivi.

Oltre alla domanda del titolo anziché all'esempio, xpath dovrebbe probabilmente consentire che X sia in una cella th anziché in td. E immagino che vorresti il ​​seguente tr se è nello stesso genitore (thead, tbody, tfoot).

Così mi piacerebbe andare per

//tr[* = 'X']/following-sibling::tr[1] 
8
//td[.='X']/following::tr 
10

Questo dovrebbe funzionare.

tr[td/text() = 'X']/following-sibling::node()