Jsoup - 从具有相同跨度 class 名称的 html 字符串中提取

Jsoup - Extract from html string with the same span class name

我还是 html 的新手。对于 Android 项目,我需要使用 jsoup 从 html 字符串中提取一些数据。结构是这样的。所有 span 标签都具有相同的 class 名称。我需要的数据介于两者之间。

<span class="head">a</span>
xxxx data xxxx
<span class="head">b</span>
xxxx data xxxx
<span class="head">c</span>
xxxx data xxxx

有什么办法可以提取出来吗?

您必须做两件事:

  • select 您感兴趣的文本节点之前的所有元素,
  • 使用nextSibling方法获取文本节点。

看看这个示例代码: 导入 org.jsoup.Jsoup; 导入 org.jsoup.nodes.Document; 导入 org.jsoup.nodes.Element; 导入 org.jsoup.nodes.TextNode;

public class JsoupExample {

    public static void main(String[] args) {
        String html = "<span class=\"head\">a</span>\n" +
                "xxxx data xxxx\n" +
                "<span class=\"head\">b</span>\n" +
                "xxxx data xxxx\n" +
                "<span class=\"head\">c</span>\n" +
                "xxxx data xxxx";

        Document document = Jsoup.parse(html);

        for (Element span : document.select("span.head")) {
            TextNode node = (TextNode) span.nextSibling();

            assert "xxxx data xxxx".equals(node.text());

            System.out.println(node.text());
        }
    }
}

它使用您的输入并显示两个步骤。

这里 document.select("span.head") 我们 select 所有具有 class head 的元素,然后我们使用 forEach(span -> {}) 函数和 lambda 表达式迭代这些元素(这是Java8 个例子)。然后我们使用以下方法得到有趣的文本节点:TextNode node = (TextNode) span.nextSibling(); 这里我们只是检查文本节点是否等于我们使用断言期望的值,我们只是将它显示到标准输出。

根据您的需要修改此代码示例。希望对你有帮助。