使用JSOUP库在Java中读取标签时如何保留诸如<br/>,<ul>,<li>,<p>等标签的含义?

时间:2016-10-10 22:06:17

标签: java html jsoup

我正在编写一个从本地HTML文件中提取某些信息的程序。然后,该信息将显示在Java JFrame上,并导出到excel文件。 (我正在使用JSoup 1.9.2库进行HTML解析)

我遇到的问题是,每当我从HTML文件中提取任何内容时,JSoup都不会考虑破解标记,行标记等HTML标记,因此,所有信息都被提取为大块数据没有任何适当的换行符或格式。

为了向您展示一个示例,如果这是我想要阅读的数据:

  

标题

第1行

第2行

    无序   列出
  • 元素1
  • 元素2

数据将以:

返回
  

标题第1行第2行无序列表元素1元素2(即所有   HTML标记被忽略)

这是我用于阅读的一段代码:

private String getTitle(Document doc) { // doc is the local HTML file
    Elements title = doc.select(".title");
    for (Element id : title) {
     return id.text();
    }
    return "No Title Available ";
}

任何人都可以建议我使用一种方法来保留HTML标签背后的含义,我可以使用它来显示JFrame上的数据并以更易读的格式将其导出到Excel中吗?

感谢。

1 个答案:

答案 0 :(得分:1)

为了给每个人一个更新,我能够找到格式化问题的解决方案(更像是一种解决方法)。我现在正在做的是使用id.html()提取完整的HTML,我将其存储在String对象中。然后,我使用带有正则表达式的String函数replaceAll()来删除所有HTML标记,而不将所有内容都推送到一行。 replaceAll()函数看起来像replaceAll("\\<[^>]*>","")。我的整个 processHTML()函数类似于:

private String processHTML(String initial) { //initial is the String with all the HTML tags
        String modified = initial;
        modified = modified.replaceAll("\\<[^>]*>",""); //regular expression used
        modified = modified.trim(); //To get rid of any unwanted space before and after the needed data
        //All the replaceAll() functions below are to get rid of any HTML entities that might be left in the data extarcted from the HTML
        modified = modified.replaceAll("&nbsp;", " ");
        modified = modified.replaceAll("&lt;", "<");
        modified = modified.replaceAll("&gt;", ">");
        modified = modified.replaceAll("&amp;", "&");
        modified = modified.replaceAll("&quot;", "\"");
        modified = modified.replaceAll("&apos;", "\'");
        modified = modified.replaceAll("&cent;", "¢");
        modified = modified.replaceAll("&copy;", "©");
        modified = modified.replaceAll("&reg;", "®");
        return modified;
    }

再次感谢大家帮助我这个

干杯。