Java如何读取XML文件 Java读取XML节点方法

发布时间 - 2026-02-03 00:00:00    点击率:
Java读取XML主要有DOM、SAX和StAX三种方式:DOM适合中小型文件并支持随机访问;SAX为事件驱动,内存占用低但不可回溯;StAX是拉模式,兼顾灵活性与效率,适用于需精细控制的场景。

Java读取XML文件主要有DOM、SAX和StAX三种方式,其中DOM最常用,适合中小型XML文件,能随机访问任意节点;SAX适合大文件流式解析,内存占用

低;StAX则是拉模式解析,兼顾灵活性与效率。选择哪种方式,取决于XML大小、是否需要修改、以及对内存和性能的要求。

使用DOM解析读取XML并获取节点

DOM会将整个XML加载进内存构建成树形结构,适合需要频繁查询、修改或回溯的场景。核心步骤是:创建DocumentBuilder → 解析XML得到Document → 用getElementsByTagName或XPath定位节点 → 提取内容或属性。

  • 调用document.getElementsByTagName("tagName")返回NodeList,遍历后用node.getTextContent()获取文本值
  • node.getAttributes().getNamedItem("attrName")读取属性值
  • 若需精准定位,推荐配合javax.xml.xpath.XPath使用,例如xpath.compile("//book/title").evaluate(doc, XPathConstants.NODE)

用SAX解析处理大型XML文件

SAX是事件驱动型解析器,不构建内存树,而是通过回调方法(如startElement、endElement、characters)逐行响应标签。适合GB级日志类XML,内存友好但无法回退或随机访问。

  • 需自定义继承DefaultHandler的处理器类,重写关键方法
  • startElement中识别开始标签,记录当前路径或状态标志(如isInTitle = true)
  • characters中捕获字符数据,注意前后可能有空白符,建议用new String(ch, start, length).trim()

StAX拉模式解析——更可控的流式读取

StAX像“用迭代器读XML”,程序主动调用next()nextTag()推进解析位置,比SAX更直观,也支持写入。

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

  • XMLInputFactory.newInstance().createXMLEventReader(file)创建读取器
  • 循环判断event.getEventType(),遇到START_ELEMENT时检查event.asStartElement().getName().getLocalPart()
  • 遇到CHARACTERS事件时,用event.asCharacters().getData()获取文本内容

注意事项与常见问题

中文乱码多因未指定编码,解析时需确保输入流以UTF-8(或对应编码)打开;空节点或换行符会导致getTextContent()返回空白字符串,建议trim后判空;XPath表达式错误或命名空间未声明会返回null,调试时可先打印document.getDocumentElement().getNodeName()确认根节点。


# java  # node  # 处理器  # 编码  # 中文乱码  # win  # 常见问题  # 内存占用  # String  # NULL  # 命名空间  # xml  # 字符串  # 循环  # 继承  # Length  # Event  # 事件  # dom  # 三种  # 流式  # 主要有  # 则是  # 遍历  # 适用于  # 自定义  # 重写  # 哪种  # 会将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  如何用腾讯建站主机快速创建免费网站?  如何批量查询域名的建站时间记录?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Java垃圾回收器的方法和原理总结  Linux系统运维自动化项目教程_Ansible批量管理实战  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何撰写建站申请书?关键要点有哪些?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  网站制作价目表怎么做,珍爱网婚介费用多少?  如何在宝塔面板中创建新站点?  如何快速辨别茅台真假?关键步骤解析  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何彻底删除建站之星生成的Banner?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  网站建设要注意的标准 促进网站用户好感度!  深圳网站制作的公司有哪些,dido官方网站?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何在IIS7中新建站点?详细步骤解析  焦点电影公司作品,电影焦点结局是什么?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  千库网官网入口推荐 千库网设计创意平台入口  昵图网官网入口 昵图网素材平台官方入口  教你用AI将一段旋律扩展成一首完整的曲子  ,在苏州找工作,上哪个网站比较好?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  网站制作壁纸教程视频,电脑壁纸网站?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何用花生壳三步快速搭建专属网站?  java ZXing生成二维码及条码实例分享  如何为不同团队 ID 动态生成多个独立按钮  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】