Java怎么读取word的docx文件中的XML内容

幻夢星雲
发布: 2025-12-13 14:02:03
原创
476人浏览过
Java读取DOCX文件本质是将其作为ZIP包解析,因DOCX基于OOXML标准,内含document.xml等XML文件;可用Apache POI的XWPFDocument获取PackagePart读取XML流,或用java.util.zip手动解压并解析,须开启命名空间支持。

java怎么读取word的docx文件中的xml内容

Java 读取 DOCX 文件中的 XML 内容,本质是把 DOCX 当作 ZIP 压缩包来解析,因为 .docx 是基于 Office Open XML(OOXML)标准的 ZIP 归档,里面包含多个 XML 文件(如 document.xmlstyles.xmlheader1.xml 等)。

用 Apache POI 解析 document.xml(最常用)

Apache POI 的 XWPF 模块封装了对 DOCX 的读写,但底层仍依赖对 XML 的访问。若需直接操作原始 XML,可结合 POI 获取底层 PackagePart 或手动解压

  • 使用 XWPFDocument 加载文件后,通过 getPackage().getPartsByName(Pattern.compile("word/document\.xml")) 获取对应 XML 部分
  • 调用 getInputStream() 得到 XML 字节流,再用 DocumentBuilderSAXParser 解析成 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 使用严格命名空间,典型前缀有:

独响
独响

一个轻笔记+角色扮演的app

独响 249
查看详情 独响

立即学习Java免费学习笔记(深入)”;

  • w: 主文档结构(paragraph、run、text)
  • r: 关系(hyperlink、image reference)
  • a: 绘图(drawing、shape)
  • DOM 解析时建议用 getElementsByTagNameNS("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "p") 而非 getElementsByTagName("w:p")

不推荐直接字符串替换或正则解析 XML

XML 结构嵌套深、命名空间敏感、可能含 CDATA 或转义字符,用正则提取文本或标签容易出错:

  • 避免:content.replaceAll("<t>(.*?)</t>", "$1") —— 不处理嵌套、命名空间、换行、实体编码
  • 应优先使用标准 XML 解析器(DOM/SAX/StAX),配合命名空间处理逻辑
  • 若只提取纯文本且不关心格式,用 XWPFDocument.getText() 更简单可靠

基本上就这些。关键点是:DOCX 是 ZIP → XML 在里面 → 用 POI 或原生 ZIP + XML 解析器读取 → 别忽略命名空间。

以上就是Java怎么读取word的docx文件中的XML内容的详细内容,更多请关注php中文网其它相关文章!

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号