【问题标题】:how to extract content from <div> tag java如何从<div>标签java中提取内容
【发布时间】:2011-08-26 23:09:04
【问题描述】:

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

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

我期望的输出是:

此处为子内容
此处为主要内容

我尝试过使用正则表达式,但结果并不那么令人印象深刻。 通过使用:

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

会返回第一个 标签之前的所有字符串
那么,谁能帮帮我吗?

【问题讨论】:

标签: java html extract


【解决方案1】:

我建议避免使用正则表达式来解析 HTML。您可以使用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 元素的内容放入Strings 的数组中,您可以简单地这样做:

    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

【讨论】:

  • err...如果我想将每个
    内容添加到数组中怎么办?有什么建议吗?谢谢
  • @kyo21:我在答案中添加了一些代码来回答您关于将div 内容放入数组的问题。
  • 哦,对不起,我再次需要你的解释,我使用方法 element.text() 来获取
    标签内的所有文本,我在 div 内容中添加了标签

    ,但是结果:-这里是子内容这里是主要内容-这里是子内容怎么会发生这种情况?

  • @kyo21: text() 获取该元素及其所有子元素的组合文本。见jsoup javadocs
  • @kyo21:我不太确定你现在有什么 html,但请注意,如果你有两个嵌套的 div 标签,每个标签都包含文本,并且你使用 text() 方法,那么最里面的div 标记的文本被打印两次:一次是在外部div 上调用text() 时,一次是在内部div 上调用它时(for 循环处理所有div 标记)。我希望这会有所帮助。
【解决方案2】:
<div class="main-content" id="mainCon">
    <div class="sub-content" id="subCon">Sub content here</div>
 Main content here </div>

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

使用document.getElementById("mainCon").innerHTML 它会给出Main content here以及sub div,但你会解析那个东西。

同样,对于 sub-div,您可以使用上面的代码片段,即document.getElementById("subCon").innerHTML

【讨论】:

  • @kyo21 :是的,您可以为每个 div 提供手动 id,也可以使用 javascript 动态提供。
猜你喜欢
相关资源
最近更新 更多
热门标签