Jsoup - 从具有相同span类名的html字符串中提取

时间:2015-04-14 02:49:17

标签: html jsoup

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

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

有什么方法可以提取它吗?

1 个答案:

答案 0 :(得分:3)

你需要做两件事:

  • 选择您感兴趣的文本节点前面的所有元素
  • 使用nextSibling方法获取文本节点。

看看这个示例代码:     import org.jsoup.Jsoup;     import org.jsoup.nodes.Document;     import org.jsoup.nodes.Element;     import 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")我们选择了类head的所有元素,然后我们使用forEach(span -> {})函数和lambda表达式迭代这些元素(这是Java 8示例)。然后我们使用以下函数获得有趣的文本节点:TextNode node = (TextNode) span.nextSibling();这里我们只是通过使用断言检查文本节点是否等于我们期望的值,我们只是将其显示为标准输出。

根据您的需要修改此代码示例。我希望它可以帮助你。