2011-12-12 67 views
2

的下列節點:的xpath選擇基於該HTML的特定節點

< table width='300' ......> 
<tbody> 
    < tr> 
    < td class = 'wcheader1'> ..... </td> 
    < /tr> 
    < tr> 
    < td class = 'wccontnetbox'>......< /td> 
    < /tr> 
    < tr> 
    < td class = 'wccontnetbox'>......< /td> 
    < /tr> 
    < tr> 
    < td class = 'wcheader1'> ..... </td> 
    < /tr> 
    < tr> 
    < td class = 'wccontnetbox'>......< /td> 
    < /tr> 
    < tr> 
    < td class = 'wccontnetbox'>......< /td> 
    < /tr> 
    < tr> 
    < td class = 'wcheader1'> ..... </td> 
    < /tr> 
    < tr> 
    < td class = 'wccontnetbox'>......< /td> 
    < /tr> 
    < tr> 
    < td class = 'wccontnetbox'>......< /td> 
    < /tr> 
</tbody> 
</table> 

我有麻煩僅選擇所述第一<td class='wcheader1'>元件後的頭兩個<td class='wccontnetbox'>元件。是否有XPath表達式來執行此操作?

UPDATE:這些元素是動態的。因爲你不顯示完整的輸入

//table/tbody/tr[td[@class='wcheader1']][2]/ 
    following-sibling::tr[td[@class='wccontnetbox']][position()<3]/td 

我使用//

回答

4

使用下面的表達式中的第wcheader1後,選擇前兩個wccontnetbox元素。使用表格的直接路徑會更好(例如/html/body/<etc>/table...)。

使用以下表達式來選擇第一和第二wcheader1元件之間的所有節點:

//table/tbody/tr[td[@class='wcheader1']][1]/following-sibling::tr[ 
    count(.|//table/tbody/tr[td[@class='wcheader1']][2]/preceding-sibling::tr) 
    = 
    count(//table/tbody/tr[td[@class='wcheader1']][2]/ 
     preceding-sibling::tr)]/td[@class='wccontnetbox'] 

:此第二表達式使用Kayessian節點集合相交公式。在一般情況下,使用下面的表達式來找到$set1$set2交集:

$set1[count(.|$set2)=count($set2)] 
+0

謝謝@lwburk我更新了帖子 – NouNou

+0

@NouNou - 響應編輯答案。 –

+0

我不能使用[position()<3],因爲這些元素是動態的。有時候是4,有時候是6 .... – NouNou