如何从<div>标签 Java 中提取内容



我有一个严重的问题。我想从标签中提取内容,例如:

<div class="main-content">
    <div class="sub-content">Sub content here</div>
      Main content here </div>

我期望的输出是:

此处的子内容
此处的主要内容

我尝试过使用regex,但结果并不那么令人印象深刻。通过使用:

Pattern.compile("<div>(\S+)</div>");

将返回第一个</div>标签
那么,有人能帮我吗?

我建议在解析HTML时避免使用regex。您可以使用Jsoup:轻松完成您的要求

public static void main(String[] args) {
    String html = "<html><head/><body><div class="main-content">" +
            "<div class="sub-content">Sub content here</div>" +
            "Main content here </div></body></html>";
    Document document = Jsoup.parse(html);
    Elements divs = document.select("div");
    for (Element div : divs) {
        System.out.println(div.ownText());
    }
}

回复评论:如果您想将div元素的内容放入String的数组中,您可以简单地执行:

    String[] divsTexts = new String[divs.size()];
    for (int i = 0; i < divs.size(); i++) {
        divsTexts[i] = divs.get(i).ownText();
    }

回复注释:如果您有嵌套的元素,并且希望为每个元素获得自己的文本,那么可以使用jquery多选符语法。这里有一个例子:

public static void main(String[] args) {
    String html = "<html><head/><body><div class="main-content">" +
            "<div class="sub-content">" +
            "<p>a paragraph <b>with some bold text</b></p>" +
            "Sub content here</div>" +
            "Main content here </div></body></html>";
    Document document = Jsoup.parse(html);
    Elements divs = document.select("div, p, b");
    for (Element div : divs) {
        System.out.println(div.ownText());
    }
}

上面的代码将解析以下HTML:

<html>
<head />
<body>
<div class="main-content">
<div class="sub-content">
<p>a paragraph <b>with some bold text</b></p>
Sub content here</div>
Main content here</div>
</body>
</html>

并打印以下输出:

Main content here
Sub content here
a paragraph
with some bold text
<div class="main-content" id="mainCon">
    <div class="sub-content" id="subCon">Sub content here</div>
 Main content here </div>

从这个代码,如果你想得到你提到的的结果

使用document.getElementById("mainCon").innerHTML,它将在此处提供主内容以及子div,但您可以解析该内容。

类似地,对于sub-div,您可以使用上面的代码snippet,即document.getElementById("subCon").innerHTML

最新更新