我有一个包含跟随逻辑的表。
<tr class=hiderow><td class=packagename>...</td></tr>
- &gt;的每一行此行将不可见。因此该表可能包含100行,但如果有20行包含class=hiderow
,则用户只能在页面上看到80行。我想检索那80行(不是100)的名称。所以我需要解析不包含class=hiderow
的数据。我知道如何使用jsoup
获取每个名字,我也看到文档中有
:not(selector) elements that do not match the selector.
但我不确定如何使用它。请帮忙。
编辑我已经弄明白该怎么做了。如果有更好的方法,请告诉我 EDIT2 请使用BalusC的以下解决方案。它更清洁。
public void obtainPackageName(String urlLink) throws IOException{
List<String> pdfList = new ArrayList<String>();
URL url = new URL(urlLink);
Document doc = Jsoup.parse(url, 3000);
Element table = doc.select("table[id=mastertableid]").first();
Iterator<Element> rowIter = table.select("tr").iterator();
while(rowIter.hasNext()){
Element row = rowIter.next();
if(!row.className().contains("hiderow")){
Element packageName = row.select("td[class=packagename]").first();
if(packageName != null){
pdfList.add(packageName.text());
}
}
}
}
答案 0 :(得分:7)
您需要对感兴趣的元素(在您的情况下为:not()
)应用tr
,然后将元素相对的CSS选择器传递到元素应该 not 匹配(在您的情况下为.hiderow
)。
所以,这应该做:
Document document = Jsoup.connect(urlLink).get();
Elements packagenames = document.select("#mastertableid tr:not(.hiderow) td.packagename");
List<String> pdfList = new ArrayList<String>();
for (Element packagename : packagenames) {
pdfList.add(packagename.text());
}