2013-12-11 33 views
0

我解析一些表從一個網站,特別我想提取由類名以下的細胞元素:Jsoup:選擇具有單個類

<td class=" text_bold">example</td> 

我用的是標準Jsoup選擇提取與類代碼,如下所示:

Elements cells = doc.select("td.text_bold"); 

的問題是,有其也選擇,因爲它們具有兩個text_bold類和另一個類的其他細胞,例如:

<td class="text_bold text_align_left" valign="top" width="150">example</td> 

是否有一種簡單的方法來過濾僅具有select()方法中指定的單個類的元素?

+1

嘗試'doc.select( 「TD [類= 'text_bold']」)'。 – Vulcan

+0

@Vulcan感謝您的建議。似乎它應該與'[attribute = value]'一起工作,但它返回0個元素。 – ashatte

+1

'text_bold'之前或之後是否有空格,但仍在類聲明中?如果是這樣的話,你可能希望對startsWith使用'^ =',對於endsWith使用'$ =',或者如果空格在任一側和/或不一致,則使用正則表達式選擇符'〜='。 – Vulcan

回答

2

我之前就陷入過這種狀況。不過,我已經使用的伎倆是:

  • 首先把所有的元素Elements與目標類:爲您的上下文"text_bold"
  • 然後遍歷每個元素比較它們的類名可使用Element.className()功能得到。如果類名稱爲"aClass bClass"格式,則此函數會將其作爲一個類名返回。

例如:

Document doc = Jsoup.parse("<td class=\"text_bold text_align_left\" valign=\"top\" width=\"150\">example</td> 
<td class=\" text_bold\">example</td>"); 
     Elements elms = doc.select("td.text_bold"); 
     for(Element e:elms) 
      if(e.className().trim().equals("text_bold")) 
          //^^^<--trim is required as, 
          // their can be leading and trailing space 
      { 
       System.out.println(e.className()); 
       // do my thing 

      } 
+0

謝謝,很好的解決方案。 – ashatte