全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

Java中解析InputStream的XML需选SAX、DOM或StAX:DOM适合小中文件但占内存;SAX事件驱动、低内存;StAX拉模式、易控且高效;均须防XXE、正确关流、处理BOM。

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更易控制流程,且无需完整加载文档。

  • 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  # apache  # 编码  # 字节  # win  # stream  # 常见问题  # xml解析  # 内存占用 


相关文章: 如何做网站制作流程,*游戏网站怎么搭建?  网站按钮制作软件,如何实现网页中按钮的自动点击?  内网网站制作软件,内网的网站如何发布到外网?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何制作算命网站,怎么注册算命网站?  宁波自助建站系统如何快速打造专业企业网站?  制作公司内部网站有哪些,内网如何建网站?  如何通过.red域名打造高辨识度品牌网站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何正确选择百度移动适配建站域名?  如何用IIS7快速搭建并优化网站站点?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何快速启动建站代理加盟业务?  平台云上自助建站如何快速打造专业网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  seo网站制作优化,网站SEO优化步骤有哪些?  如何选择高效响应式自助建站源码系统?  招贴海报怎么做,什么是海报招贴?  如何在宝塔面板中修改默认建站目录?  如何用虚拟主机快速搭建网站?详细步骤解析  小建面朝正北,A点实际方位是否存在偏差?  如何通过西部建站助手安装IIS服务器?  网站制作的步骤包括,正确网址格式怎么写?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速生成高效建站系统源代码?  制作宣传网站的软件,小红书可以宣传网站吗?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  济南企业网站制作公司,济南社保单位网上缴费步骤?  北京专业网站制作设计师招聘,北京白云观官方网站?  ,购物网站怎么盈利呢?  成都网站制作报价公司,成都工业用气开户费用?  制作网站的公司有哪些,做一个公司网站要多少钱?  香港服务器选型指南:免备案配置与高效建站方案解析  制作电商网页,电商供应链怎么做?  金*站制作公司有哪些,金华教育集团官网?  建站之星好吗?新手能否轻松上手建站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  建站之星展会模版如何一键下载生成?  建站之星多图banner生成与模板自定义指南  网站制作员失业,怎样查看自己网站的注册者?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  专业公司网站制作公司,用什么语言做企业网站比较好?  安徽网站建设与外贸建站服务专业定制方案 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。