Java中的XML处理:库与工具概述
XML(可扩展标记语言)仍然是企业应用、Web服务和配置文件中存储和传输结构化数据的关键格式之一。Java提供了丰富的内置和第三方库用于处理XML。在本文中,我们将详细分析主要工具、它们的特点以及使用示例。
用于XML处理的内置API
Java标准库(Java SE)包含三个主要的用于解析和处理XML的API:
1. DOM(文档对象模型)
DOM 是一种将整个XML文档以树形结构加载到内存中的API。它便于随机访问元素,但在处理大文件时需要大量资源。
使用场景: 需要频繁修改文档或对其结构执行复杂查询时。
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("data.xml");
NodeList books = doc.getElementsByTagName("book"); for (int i = 0; i < books.getLength(); i++) { Element book = (Element) books.item(i); String title = book.getElementsByTagName("title").item(0).getTextContent(); System.out.println("书籍: " + title); } }}2. SAX(XML简单API)
SAX 是一种事件驱动的解析器。它顺序读取文档,并在遇到标签、属性或文本时调用处理方法。它不会在内存中创建树结构,因此非常适合处理大文件。
使用场景: 用于流式处理巨大的XML文件(例如日志或导出数据)。
import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;
public class SaxExample extends DefaultHandler { public void startElement(String uri, String localName, String qName, Attributes attrs) { if ("book".equals(qName)) { System.out.println("找到书籍,id: " + attrs.getValue("id")); } }
public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("data.xml", new SaxExample()); }}3. StAX(XML流式API)
StAX 是一种流式拉取解析器。与SAX中事件被“推”到处理器不同,StAX允许程序请求下一个元素(拉取模型)。这提供了对解析过程的更多控制。
使用场景: 需要SAX的灵活性,但同时能够暂停和恢复读取时。
import javax.xml.stream.*;
public class StaxExample { public static void main(String[] args) throws Exception { XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReader( new java.io.FileInputStream("data.xml"));
while (reader.hasNext()) { int event = reader.next(); if (event == XMLStreamConstants.START_ELEMENT && "title".equals(reader.getLocalName())) { System.out.println("书名: " + reader.getElementText()); } } reader.close(); }}XML与Java对象的绑定:JAXB
JAXB(Java XML绑定架构) 是一种用于将XML转换为Java对象以及反向转换(编组/解组)的标准API。根