JSoup:检索不包含特定属性的元素

Tha*_*ham 3 java jsoup

我有一个包含跟随逻辑的表.

  1. 表格显示名称列表
  2. 对于包含的每一行<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)

Bal*_*usC 7

你需要应用: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)