Java如何从输入流(InputStream)解析XML

幻夢星雲
发布: 2025-12-23 01:53:19
原创
898人浏览过
Java中解析InputStream的XML需选SAX、DOM或StAX:DOM适合小中文件但占内存;SAX事件驱动、低内存;StAX拉模式、易控且高效;均须防XXE、正确关流、处理BOM。

java如何从输入流(inputstream)解析xml

Java中从InputStream解析XML,核心是使用标准的XML解析API(如SAX、DOM或StAX),将输入流作为数据源传入解析器。关键在于确保流未被提前读取或关闭,并选择合适解析方式。

使用DOM解析器(适合小到中等XML)

DOM会将整个XML加载为内存中的树结构,便于随机访问节点,但不适用于大文件。

  • DocumentBuilder配合InputSource包装InputStream
  • 注意:若InputStream含BOM(如UTF-8带签名),可能导致解析失败,建议用InputStreamReader显式指定编码并跳过BOM
  • 示例代码片段:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(inputStream));
登录后复制

使用SAX解析器(适合大文件、低内存占用

SAX是事件驱动的流式解析,不构建内存树,适合处理大XML或只需提取部分信息的场景。

  • 实现DefaultHandler子类,重写startElementcharacters等方法
  • 直接传入InputStreamXMLReader.parse(),无需额外包装
  • 推荐设置setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)防止XXE攻击

使用StAX解析器(推荐:兼顾流式与编程便利)

StAX(Streaming API for XML)是Java内置的拉模式解析器,比SAX更易控制流程,且无需完整加载文档。

Akkio
Akkio

Akkio 是一个无代码 AI 的全包平台,任何人都可以在几分钟内构建和部署AI

Akkio 157
查看详情 Akkio

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

  • XMLInputFactory创建XMLStreamReader
  • 直接传入InputStream,支持设置字符编码(如factory.createXMLStreamReader(inputStream, "UTF-8")
  • 通过next()getEventType()遍历事件,用getElementText()快速获取文本内容

注意事项与常见问题

无论哪种方式,都要注意:

  • InputStream只能被读取一次,重复解析需重新获取流(如重置、重开或缓存字节
  • 务必在finally块或try-with-resources中关闭流(DOM/SAX需手动关;StAX的XMLStreamReader也建议调用close()
  • 避免使用已弃用的javax.xml.parsers.SAXParserFactory.newInstance().newSAXParser()旧式写法,优先用标准工厂模式
  • 如XML来自网络或不可信源,必须禁用外部实体解析,防范XXE漏洞

以上就是Java如何从输入流(InputStream)解析XML的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

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

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