You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:25:34