400 8949 560

NEWS/新闻

分享你我感悟

您当前位置> 主页 > 新闻 > 技术开发

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()确认根节点。

相关案例查看更多