java – JSoup:检索不包含特定属性的元素
发布时间:2020-12-15 08:44:41 所属栏目:Java 来源:网络整理
导读:我有一个包含跟随逻辑的表. 表格显示名称列表 对于包含 tr class = hiderow td class = packagename … / td / tr的每一行 – 此行将不可见. 因此表可能包含100行,但如果有20行包含class = hiderow,则用户只能在页面上看到80行.我想检索那80行(不是100)的名
我有一个包含跟随逻辑的表.
>表格显示名称列表 因此表可能包含100行,但如果有20行包含class = hiderow,则用户只能在页面上看到80行.我想检索那80行(不是100)的名称.所以我需要解析不包含class = hiderow的数据.我知道如何使用jsoup获取每个名称,我也看到文档中有 编辑我已经弄清楚如何做到这一点.如果有更好的方法,请告诉我. 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()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |