java - 使用 JSOUP 库在 Java 中读取 <br>、<ul>、<li>、<p> 等标签时如何保留它们的含义?

标签 java html jsoup

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

我遇到了一个问题,每当我从 HTML 文件中提取任何内容时,JSoup 都不会考虑 HTML 标签,如中断标签、行标签等,因此,所有信息都像一大块数据一样被提取没有任何正确的换行符或格式。

向您展示一个示例,如果这是我要读取的数据:

Title

Line 1

Line 2

    Unordered List
  • element 1
  • element 2

数据返回为:

Title Line 1 Line 2 Unordered List element 1 element 2 (i.e. all the HTML tags are ignored)

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

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 中?

谢谢。

最佳答案

为了向大家通报最新情况,我找到了格式问题的解决方案(更像是解决方法)。我现在正在做的是使用 id.html() 提取完整的 HTML我将其存储在 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;
    }

再次感谢大家为我提供的帮助

干杯。

关于java - 使用 JSOUP 库在 Java 中读取 <br>、<ul>、<li>、<p> 等标签时如何保留它们的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967486/

相关文章:

java - 从 SurfaceView 获得更多 FPS,我可以做些更好的事情吗?

html - 表格列宽不会改变

regex - Jsoup、正则表达式、XPath 从 HTML 提取内容的性能比较?

java - Jsoup:将属于正文的文本包装在一个 div 中?

java - Jsoup Element.hasText 返回 true

java - 如何捕捉编辑器 - TextEditor 焦点的变化?

基于 Java 的 GUI 自动化(不限于基于 Java 的 GUI,如 Swing)

java - CopyOnWriteArrayList迭代器与多线程不一致?

javascript - 元素在可视区时如何显示动画?

html - 将一个 div 自动放入另一个