如何用JSoup统计h3[id=hm_2]标签后的所有p元素数量?
问题解决方法
原代码的问题
你当前的代码逻辑错误:headline.getElementsByTag("p")是在h3标签内部查找子元素p,但目标p是h3的同级后续节点,并非h3的子元素,所以必然返回空集合,统计结果为0。
正确实现方式
方法1:统计h3之后的所有同级p元素(无论中间是否有其他元素)
使用JSoup的CSS兄弟选择器~,直接选中id为hm_2的h3之后所有同级的p元素:
// 直接定位目标h3之后的所有p元素 Elements psAfterH3 = doc.select("#hm_2 ~ p"); Log.w("result", String.valueOf(psAfterH3.size())); // 输出3,符合你的期望
方法2:统计h3之后连续的p元素(遇到非p元素即停止)
如果只需要统计h3之后连续的p(比如示例中p之后是div,就停止统计),可以遍历兄弟节点:
// 先定位到目标h3 Element targetH3 = doc.getElementById("hm_2"); if (targetH3 != null) { int pCount = 0; Element nextSibling = targetH3.nextElementSibling(); // 遍历后续兄弟节点,直到不是p元素为止 while (nextSibling != null && "p".equals(nextSibling.tagName())) { pCount++; nextSibling = nextSibling.nextElementSibling(); } Log.w("result", String.valueOf(pCount)); // 输出3 }
补充说明
doc.getElementById("hm_2")比doc.select("#hm_2").first()更高效,直接通过ID定位元素- CSS选择器
#hm_2 ~ p表示选中所有在#hm_2之后的同级p元素,适合需要所有后续p的场景 - 方法2适合只需要连续p的场景,避免统计后续其他元素之后的p
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

