SAX是一种轻量、快速、低内存占用的事件驱动XML解析方式,通过startElement、characters、endElement等回调方法边读边处理,适用于大文件或内存受限场景,无需加载整棵树。
SAX(Simple API for XML)是一种轻量、快速、低内存占用的XML解析方式,核心是事件驱动模型:它不把整个XML文档加载进内存,而是边读边触发回调,像“听广播”一样——遇到开始标签、结束标签、文本内容等就立刻通知你,由你决定怎么处理。
SAX解析器从XML文件开头逐字扫描,一旦识别出结构特征,就调用你预先写好的方法。比如:
时触发,你能拿到标签名、属性值(如 id="101")张三 中的“张三”时触发,注意要截取有效字符段(ch[start]...ch[start+length-1]) 时触发,表示一个元素完整闭合,适合做对象封装或存入集合关键看场景需求:
的文本),不需反复查父节点或修改结构 → SAX够用且更快三步就能跑起来,重点在Handler类的设计:
DefaultHandler,重写关键回调方法(至少 startElement / characters / endElement)currentTag)记住当前正在读的标签名,避免在 characters 中不知道文本属于谁saxParser.parse(inputStream, new MyHandler())
基本上就这些。不复杂但容易忽略细节,比如 characters 可能被多次调用(超长文本会分片)、属性要用 attributes.getValue("name") 而不是硬索引。用对了,万行XML也能毫秒级扫完。