2013-03-31 43 views
4

我的XPath是:/html/body/div/table/tbody/tr[2]/td[4]如何Xpath的轉換爲CSS

我需要一個CSS在jsoup選擇使用它。

我發現xpath和css之間的比較:here,並且在他們的示例(Second <E> element anywhere on page)中說過我不能這樣做。 Xpath xpath=(//E)[2] CSS N\A

也許我找不到我在找什麼。有任何想法嗎?

這裏是我試圖解析HTML(我得值:13):

<div class=tablecont> 
    <table width=100%> 
     <tr> 
      <td class=header align=center>Panel Color</td> 
      <td class=header align=center>Locked</td> 
      <td class=header align=center>Unqualified</td> 
      <td class=header align=center>Qualified</td> 
      <td class=header align=center>Finished</td> 
      <td class=header align=center>TOTAL</td> 
     </tr> 
     <tr> 
      <td align=center> 
       <div class=packagecode>ONE</div> 
       <div> 
       <div class=packagecolor style=background-color:#FC0;></div> 
       </div> 
      </td> 
      <td align=center>0</td> 
      <td align=center>0</td> 
      <td align=center>1</td> 
      <td align=center>12</td> 
      <td align=center class=rowhead>53</td> 
     </tr> 
     <tr> 
      <td align=center> 
       <div class=packagecode>two</div> 
       <div> 
        <div class=packagecolor style=background-color:#C3F;></div> 
       </div> 
      </td> 
      <td align=center>0</td> 
      <td align=center>0</td> 
      <td align=center>3</td> 
      <td align=center>42</td> 
      <td align=center class=rowhead>26</td> 
     </tr> 
    </table> 
</div> 
+0

但是你在尋找第二個元素在頁面的任何地方,或者它的父代的第二個孩子?如果它是前者,就不能用CSS來完成。 – BoltClock

回答

9

雖然像(//E)[2]的表達不能用CSS選擇器,像一個表達式來表示E[2]可以使用:nth-of-type()僞類效仿:

html > body > div > table > tbody > tr:nth-of-type(2) > td:nth-of-type(4) 
+0

就是這樣。謝謝:D – Kamil

0

您正在尋找這樣的事情:

http://jsfiddle.net/YZu8D/

.tablecont tr:nth-child(2) td:nth-child(4) {background-color: yellow; } 
.tablecont tr:nth-child(3) td:nth-child(4) {background-color: yellow; } 
7

對我的作品好。

//Author: Oleksandr Knyga 
function xPathToCss(xpath) { 
    return xpath 
     .replace(/\[(\d+?)\]/g, function(s,m1){ return '['+(m1-1)+']'; }) 
     .replace(/\/{2}/g, '') 
     .replace(/\/+/g, ' > ') 
     .replace(/@/g, '') 
     .replace(/\[(\d+)\]/g, ':eq($1)') 
     .replace(/^\s+/, ''); 
} 
+0

我覺得應該接受這個答案。 – Exception

+0

這將翻譯開始'/'開始'>'爲CSS,這是錯誤的。 –

+0

我工作得很好!謝謝 – lucaswxp