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

时间:2011-10-26 20:14:06

标签: java jsoup

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

  1. 表格显示名单
  2. 对于包含<tr class=hiderow><td class=packagename>...</td></tr> - &gt;的每一行此行将不可见。
  3. 因此该表可能包含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());
                }
    
            }
        }
    }
    

1 个答案:

答案 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()); 
}