加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:44:41 所属栏目:Java 来源:网络整理
导读:我有一个包含跟随逻辑的表. 表格显示名称列表 对于包含 tr class = hiderow td class = packagename … / td / tr的每一行 – 此行将不可见. 因此表可能包含100行,但如果有20行包含class = hiderow,则用户只能在页面上看到80行.我想检索那80行(不是100)的名
我有一个包含跟随逻辑的表.

>表格显示名称列表
>对于包含< tr class = hiderow>< td class = packagename> …< / td>< / tr>的每一行 – >此行将不可见.

因此表可能包含100行,但如果有20行包含class = hiderow,则用户只能在页面上看到80行.我想检索那80行(不是100)的名称.所以我需要解析不包含class = hiderow的数据.我知道如何使用jsoup获取每个名称,我也看到文档中有
:not(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());
            }

        }
    }
}

解决方法

你需要对感兴趣的元素(在你的情况下是tr)应用:not(),然后将元素相对的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()); 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读