StAX是Java中兼顾控制力与内存效率的XML流式解析方式,采用XMLStreamReader主动“拉取”节点,支持按需解析大文件;需注意事件推进、空白处理、命名空间及资源关闭。
StAX(Streaming API for XML)是Java中处理XML的流式解析方式,介于DOM(全内存加载)和SAX(纯事件驱动)之间——它让你像“拉”数据一样主动读取XML节点,控制力强、内存友好,适合大文件或需要部分解析的场景。
StAX主要靠XMLStreamReader接口实现“拉模式”解析。它不会自动触发回调,而是由你调用next()、nextTag()、getAttributeValue()等方法一步步推进并提取内容。
XMLInputFactory.newInstance().createXMLStreamReader(InputStream)
hasNext()判断是否还有事件,用next()跳到下一个事件(返回事件类型如START_ELEMENT、CHARACTERS)START_ELEMENT就获取元素名和属性;遇到CHARACTERS就读文本内容(注意过滤空白)假设有如下XML:
Java编程思想 Bruce Eckel
对应StAX代码片段:
START_ELEMENT且getLocalName().equals("book") → 调用getAttributeValue(null, "id")获取id值next()到START_ELEMENT为"title" → 再next()一次到CHARACTERS → 用getTextTrim()安全读标题文本author,遇到END_ELEMENT可做结构收尾StAX写起来直观,但几个细节容易出错:
CHARACTERS事件,内容为空白,建议用getTextTrim()或先判断isWhiteSpace()
xmlns:xsi),传null作为第一个参数才能正确获取;否则可能返回nullxmlStreamReader.close()必须调用,否则资源泄漏(推荐try-with-resources)skipElement()(Java 9+)或手动循环匹配START/END_ELEMENT
如果你需要:

基本上就这些。StAX不复杂但容易忽略状态推进和空白处理,动手写两遍就顺了。