Java利用 Spire.Doc for Java解析HTML的完整指南

 更新时间:2026年06月10日 14:57:48   作者:缺点内向  
在 Java 开发中,HTML 解析是一项常见需求,本文将介绍如何利用 Spire.Doc for Java 库来完成 HTML 的解析工作,感兴趣的小伙伴可以了解下

在 Java 开发中,HTML 解析是一项常见需求。无论是需要从网页中抓取结构化数据、分析页面内容,还是处理本地的 HTML 文档,开发者通常都需要一套稳定且高效的处理方案。

本文将介绍如何利用 Spire.Doc for Java 库来完成 HTML 的解析工作。该库的主要设计目标是处理 Word 文档,但其 API 同时支持将 HTML 内容加载并转换为内部的文档对象模型,开发者可以基于此提取文本、表格等数据。

环境要求:Java JDK 8 或更高版本(若涉及 URL 抓取,推荐 JDK 11+)。

1. 环境配置

在开始编码之前,需要先将 Spire.Doc for Java 集成到项目中。

如果使用 Maven 管理项目,可以在 pom.xml 中配置仓库和依赖:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc</artifactId>
        <version>14.6.0</version>
    </dependency>
</dependencies>

如果不想使用 Maven,也可以手动下载 JAR 包并导入项目中。

2. 核心解析逻辑

Spire.Doc 处理 HTML 的基本方式是:将 HTML 字符串或文件内容通过 appendHTML() 方法添加到文档节(Section)的段落(Paragraph)中,HTML 标签会被转换成 SectionParagraphTable 等对象。

2.1 从 HTML 字符串中提取文本

以下示例演示如何将一个包含多种标签的 HTML 字符串转换为纯文本。

import com.spire.doc.*;

public class ExtractTextFromHtml {
    public static void main(String[] args) {
        // 模拟一段 HTML 内容
        String htmlContent = "<html>" +
                "<body>" +
                "<h1>Java 解析教程</h1>" +
                "<p>这是一段用于测试的普通文本。</p>" +
                "<ul>" +
                "<li>列表项 A</li>" +
                "<li>列表项 B</li>" +
                "</ul>" +
                "</body>" +
                "</html>";

        // 创建 Document 实例
        Document doc = new Document();
        Section section = doc.addSection();
        Paragraph paragraph = section.addParagraph();
        paragraph.appendHTML(htmlContent);

        // 遍历所有段落提取文本
        StringBuilder extractedText = new StringBuilder();
        for (Section sec : (Iterable<Section>) doc.getSections()) {
            for (Paragraph para : (Iterable<Paragraph>) sec.getParagraphs()) {
                extractedText.append(para.getText()).append("\n");
            }
        }

        System.out.println("提取结果:\n" + extractedText);
        doc.close();
    }
}

运行效果:程序将打印出去除 HTML 标签后的纯文本内容,标题和列表项各自占据一行。

2.2 提取 HTML 中的表格数据

对于包含表格的 HTML 内容,Spire.Doc 会将 <tr> 标签解析为 Table 对象。以下代码演示如何遍历文档并提取表格中的行列数据。

import com.spire.doc.*;

public class ExtractTableFromHtml {
    public static void main(String[] args) {
        String htmlWithTable = "<table border='1'>" +
                "<tr><th>ID</th><th>名称</th><th>价格</th></tr>" +
                "<tr><td>001</td><td>笔记本电脑</td><td>$999</td></tr>" +
                "<tr><td>002</td><td>智能手机</td><td>$699</td></tr>" +
                "</table>";

        Document doc = new Document();
        Section section = doc.addSection();
        Paragraph paragraph = section.addParagraph();
        paragraph.appendHTML(htmlWithTable);

        // 遍历文档对象,寻找表格
        for (Section sec : (Iterable<Section>) doc.getSections()) {
            for (Object obj : sec.getBody().getChildObjects()) {
                if (obj instanceof Table) {
                    Table table = (Table) obj;
                    System.out.println("正在提取表格数据...");
                    for (TableRow row : (Iterable<TableRow>) table.getRows()) {
                        for (TableCell cell : (Iterable<TableCell>) row.getCells()) {
                            // 提取每个单元格的文本
                            for (Paragraph para : (Iterable<Paragraph>) cell.getParagraphs()) {
                                System.out.print(para.getText() + "\t");
                            }
                        }
                        System.out.println(); // 换行
                    }
                }
            }
        }
        doc.close();
    }
}

3. 高级场景:文件与 URL 解析

3.1 读取本地 HTML 文件

如果存在本地的 .html 文件,可以使用 loadFromFile 方法直接加载并指定格式。

import com.spire.doc.*;

public class ParseHtmlFile {
    public static void main(String[] args) {
        Document doc = new Document();
        // 指定 FileFormat.Html 以正确解析
        doc.loadFromFile("D:/projects/sample.html", FileFormat.Html);

        // 获取全部文本
        String fullText = doc.getText();
        System.out.println(fullText);
        
        doc.close();
    }
}

3.2 抓取 URL 并解析

对于在线网页,需要结合 Java 原生的 HttpClient(JDK 11+)先获取 HTML 源代码,再进行解析。这种组合方案适用于需要从实时网页中提取局部内容的场景。

import com.spire.doc.*;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class ParseHtmlFromUrl {
    private static final HttpClient httpClient = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

    public static void main(String[] args) throws Exception {
        String url = "https://example.com"; // 替换为目标网址

        // 1. 抓取 HTML 内容
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("User-Agent", "Mozilla/5.0")
                .GET()
                .build();

        HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
        String html = response.body();

        // 2. 解析 HTML
        Document doc = new Document();
        Section section = doc.addSection();
        Paragraph paragraph = section.addParagraph();
        paragraph.appendHTML(html);

        // 3. 提取数据(示例:提取所有样式为 Heading 的文本)
        System.out.println("--- 网页标题/大纲 ---");
        for (Section sec : (Iterable<Section>) doc.getSections()) {
            for (Paragraph para : (Iterable<Paragraph>) sec.getParagraphs()) {
                if (para.getStyleName() != null && para.getStyleName().startsWith("Heading")) {
                    System.out.println(para.getText());
                }
            }
        }
        doc.close();
    }
}

4. 注意事项

  • 资源管理:使用 Document 对象结束后,建议调用 doc.close() 释放资源,尤其在循环处理大量文件时。
  • 样式识别:如上文 URL 示例所示,该库在解析 HTML 时将 <h1> 等标签映射为 Heading1 等内置样式名称,可用于提取文章结构。
  • 适用场景评估:该方案适用于需要将 HTML 内容转换为文档对象并进行文本或表格提取的场景。如果核心需求是基于 CSS 选择器或 XPath 的精确元素定位,Jsoup 等其他专用 HTML 解析库可能是更合适的选择。

总结

Spire.Doc for Java 提供了一种将 HTML 内容纳入文档对象模型的解析方式,支持从字符串、本地文件和网络来源加载 HTML,并允许开发者通过遍历节、段落和表格等对象来提取所需数据。该方法在处理 HTML 到文档结构的转换以及基础数据提取场景中具有一定的实用性。开发者可根据实际项目需求,结合 Java 的网络请求能力,构建从网页抓取到数据解析的完整流程。

到此这篇关于Java利用 Spire.Doc for Java解析HTML的完整指南的文章就介绍到这了,更多相关Java解析HTML内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java检测redis是否可用的方法示例

    java检测redis是否可用的方法示例

    这篇文章主要给大家介绍了关于java检测redis是否可用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Java结合EasyExcel构建复杂多级表头

    Java结合EasyExcel构建复杂多级表头

    在Java开发中,处理Excel文件时,构建复杂的多级表头是一项常见且具有挑战性的任务,下面小编就来和大家聊聊如何通过自定义方法实现多级表头的构建吧
    2025-03-03
  • JSP页面无法识别EL表达式问题解决方案

    JSP页面无法识别EL表达式问题解决方案

    这篇文章主要介绍了JSP页面无法识别EL表达式问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • SpringCloud Alibaba框架介绍

    SpringCloud Alibaba框架介绍

    spring cloud是一个基于springboot实现的微服务架构开发工具,目前主流的SpringCloud分为SpringCloud Netflix和阿里云开源的SpringCloud Alibaba两个系列,本文主要介绍SpringCloud Alibaba框架,感兴趣的朋友可以参考一下
    2023-04-04
  • Spring-Bean创建对象的步骤方式详解

    Spring-Bean创建对象的步骤方式详解

    在本篇文章里小编给大家分享的是关于Spring-Bean创建对象的步骤方式详解内容,有兴趣的朋友们跟着学习下。
    2020-02-02
  • Springboot整合WebSocket 实现聊天室功能

    Springboot整合WebSocket 实现聊天室功能

    WebSocket是一种在单个TCP连接上进行全双工通信的协议,本文主要介绍了Springboot整合WebSocket实现聊天室功能,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • Java语言实现反转链表代码示例

    Java语言实现反转链表代码示例

    这篇文章主要介绍了Java语言实现反转链表代码示例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10
  • 基于Java的打包jar、war、ear包的作用与区别详解

    基于Java的打包jar、war、ear包的作用与区别详解

    本篇文章,小编为大家介绍,基于Java的打包jar、war、ear包的作用与区别详解。需要的朋友参考下
    2013-04-04
  • MyBatis中执行SQL语句的几种方式总结

    MyBatis中执行SQL语句的几种方式总结

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,下面这篇文章主要给大家介绍了关于MyBatis中执行SQL语句的几种方式,需要的朋友可以参考下
    2024-04-04
  • SpringBoot整合Elasticsearch游标查询的示例代码(scroll)

    SpringBoot整合Elasticsearch游标查询的示例代码(scroll)

    这篇文章主要介绍了SpringBoot整合Elasticsearch游标查询(scroll),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论