Java中的XML处理:DOM、SAX、StAX和JAXB

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的XML处理:DOM、SAX、StAX和JAXB



XML(可扩展标记语言)仍然是存储和传输结构化数据的关键格式之一。在Java中,有几种处理XML的方式,每种方式适用于不同的任务:从读取小型配置文件到处理GB级文件。在本文中,我们将介绍四种主要方法:DOM、SAX、StAX和JAXB。



1. DOM(文档对象模型)—— 完全加载到内存



DOM解析器将整个XML文档加载到内存中,创建树状结构。这便于导航和修改,但对于大文件效率不高。



使用DOM读取XML的示例:



import javax.xml.parsers.*;import org.w3c.dom.*;

public class DomExample { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("books.xml");

NodeList bookList = doc.getElementsByTagName("book"); for (int i = 0; i < bookList.getLength(); i++) { Element book = (Element) bookList.item(i); String title = book.getElementsByTagName("title").item(0).getTextContent(); String author = book.getElementsByTagName("author").item(0).getTextContent(); System.out.println("书籍: " + title + ", 作者: " + author); } }}


  • 优点:方便访问任何节点,支持XPath,可以修改文档。
  • 缺点:占用大量内存,处理大文件时速度慢。
  • 适用场景:配置文件、小型文档(几MB以内)。


2. SAX(XML简单API)—— 事件驱动的流式解析器



SAX顺序读取XML并生成事件(元素开始、文本、元素结束)。您只处理需要的事件——这允许处理任意大小的文件。



使用SAX处理XML的示例:



import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

public class SaxExample extends DefaultHandler { private boolean inTitle = false;

public void startElement(String uri, String localName, String qName, Attributes attrs) { if (qName.equals("title")) inTitle = true; }

public void characters(char[] ch, int start, int length) { if (inTitle) System.out.println("书名: " + new String(ch, start, length)); }

public void endElement(String uri, String localName, String qName) { if (qName.equals("title")) inTitle = false; }

public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("books.xml", new SaxExample()); }}


  • 优点:内存占用极小,速度快。
  • 缺点:无法返回前一个元素,难以修改文档。
  • 适用场景:大型XML文件(日志、数据库转储、报告)。


3. StAX(XML流式API)—— 游标控制的流式解析器



StAX是SAX的更现代替代方案。您自己控制读取,通过移动游标在XML流中前进。有两种模式:Cursor API(事件迭代器)和Event API(事件处理)。



使用Cursor API(XMLStreamReader)的示例:



import javax.xml.stream.*;

public class StaxExample { public static void main(String[] args) throws Exceptio

推荐