我有一个包含跟随逻辑的表.
<tr class=hiderow><td class=packagename>...</td></tr>- >此行将不可见.因此表可能包含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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你需要应用:not()感兴趣的元素(这是对tr你的情况),然后将相关元素的CSS选择器传递到其上的元素应该不匹配(这是.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());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5437 次 |
| 最近记录: |