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

JSoup技术问题:如何解析嵌套文本?

嘿,用JSoup提取嵌套文本其实挺简单的,我给你分几种常见场景来讲解,直接上干货!

用JSoup提取嵌套文本的几种实用方法

1. 一键提取元素下所有嵌套文本(自动拼接)

如果你想直接拿到某个元素里所有层级的文本内容,不管它嵌套了多少层标签,用text()方法就可以轻松搞定。这个方法会自动忽略所有HTML标签,把所有子元素的文本拼接成一个字符串。

举个实际例子,假设你要解析的HTML结构是这样的:

<div class="article">
  这是正文开头
  <h3>小标题</h3>
  <p>段落内容<span>这里还有嵌套的span文本</span></p>
</div>

对应的JSoup代码实现:

// 假设你已经通过JSoup解析得到了Document对象doc
Element articleDiv = doc.selectFirst(".article");
// 提取所有嵌套文本
String fullText = articleDiv.text();
System.out.println(fullText);
// 输出结果:这是正文开头 小标题 段落内容这里还有嵌套的span文本

2. 单独获取每个文本节点(保留独立文本块)

如果你不想直接拼接,而是想单独拿到每个层级的文本节点(比如要分别处理不同位置的文本),可以用textNodes()方法,它会返回该元素下所有的文本节点列表,包括子元素里的节点。

代码示例:

Element articleDiv = doc.selectFirst(".article");
List<TextNode> textNodes = articleDiv.textNodes();
// 遍历每个文本节点,过滤掉空白内容
for (TextNode node : textNodes) {
    String cleanText = node.text().trim();
    if (!cleanText.isEmpty()) {
        System.out.println(cleanText);
    }
}
// 输出结果:
// 这是正文开头
// 小标题
// 段落内容
// 这里还有嵌套的span文本

3. 只提取当前元素的文本(排除子元素内容)

如果你只想拿到当前元素本身的文本,不想包含子元素里的内容,那就用ownText()方法。它只会返回元素自身的文本,完全忽略子元素的内容。

比如还是刚才的HTML,只想提取<div>本身的文本,不包含<h3>和<p>里的内容:

Element articleDiv = doc.selectFirst(".article");
String divOwnText = articleDiv.ownText().trim();
System.out.println(divOwnText);
// 输出:这是正文开头

要是想提取<p>本身的文本,不包含<span>的内容:

Element pTag = doc.selectFirst(".article p");
String pOwnText = pTag.ownText().trim();
System.out.println(pOwnText);
// 输出:段落内容

4. 结合选择器精准定位嵌套文本

如果你的目标文本在特定的嵌套结构里,比如只想拿到<span>里的内容,直接用选择器定位到该元素,再调用text()就可以了:

Element spanTag = doc.selectFirst(".article p span");
String spanText = spanTag.text();
System.out.println(spanText);
// 输出:这里还有嵌套的span文本

一般来说,上面这几种方法就能覆盖绝大多数提取嵌套文本的需求了。如果遇到特别复杂的嵌套结构,还可以自己写递归逻辑遍历元素,但日常开发里前面的方法完全够用啦~

内容的提问来源于stack exchange,提问作者İbrahim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:15:48