Java读取DOCX文件本质是将其作为ZIP包解析,因DOCX基于OOXML标准,内含document.xml等XML文件;可用Apache POI的XWPFDocument获取PackagePart读取XML流,或用java.util.zip手动解压并解析,须开启命名空间支持。

Java 读取 DOCX 文件中的 XML 内容,本质是把 DOCX 当作 ZIP 压缩包来解析,因为 .docx 是基于 Office Open XML(OOXML)标准的 ZIP 归档,里面包含多个 XML 文件(如 document.xml、styles.xml、header1.xml 等)。
用 Apache POI 解析 document.xml(最常用)
Apache POI 的 XWPF 模块封装了对 DOCX 的读写,但底层仍依赖对 XML 的访问。若需直接操作原始 XML,可结合 POI 获取底层 PackagePart 或手动解压:
- 使用
XWPFDocument加载文件后,通过getPackage().getPartsByName(Pattern.compile("word/document\.xml"))获取对应 XML 部分 - 调用
getInputStream()得到 XML 字节流,再用DocumentBuilder或SAXParser解析成 DOM/SAX 树 - 示例片段:
XWPFDocument doc = new XWPFDocument(new FileInputStream("test.docx"));<br> PackagePart part = doc.getPackage().getPartsByName(Pattern.compile("word/document\.xml")).get(0);<br> Document xml = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(part.getInputStream());<br> System.out.println(xml.getDocumentElement().getNodeName()); // 通常是 w:document登录后复制
手动解压 DOCX 并读取任意 XML 文件
DOCX 就是 ZIP,可用 Java 原生 java.util.zip 打开,适合读取 styles.xml、numbering.xml 等非正文内容:
- 用
ZipFile打开 .docx 文件 - 定位目标路径,如
"word/styles.xml"或"word/numbering.xml" - 用
ZipEntry.getInputStream()读取 XML 流,再交给 XML 解析器处理 - 注意:XML 中大量使用命名空间(如
w:),解析时需开启命名空间支持(factory.setNamespaceAware(true))
注意命名空间和标签前缀(w:, r:, a: 等)
Office Open XML 使用严格命名空间,典型前缀有:
标签: word java node apache 编码 字节 office ai 解压 win stream
还木有评论哦,快来抢沙发吧~