Java XML解析

Java XML解析

解析 XML 文件是一项常见的任务,通常用于处理配置文件、数据交换等场景。以下是几种常用的 XML 解析方法及其特点:

1. ​DOM 解析

DOM(Document Object Model)将整个 XML 文档加载到内存中,形成树状结构,便于随机访问和修改。适合处理小型 XML 文件。

​优点:操作简单,支持随机访问。

​缺点:占用内存较大,不适合处理大型文件。

import org.w3c.dom.*;

import javax.xml.parsers.*;

import java.io.File;

public class DOMExample {

public static void main(String[] args) {

try {

File xmlFile = new File("person.xml");

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(xmlFile);

doc.getDocumentElement().normalize();

System.out.println("Root element: " + doc.getDocumentElement().getNodeName());

NodeList nList = doc.getElementsByTagName("name");

for (int temp = 0; temp < nList.getLength(); temp++) {

Node nNode = nList.item(temp);

if (nNode.getNodeType() == Node.ELEMENT_NODE) {

Element eElement = (Element) nNode;

System.out.println("Name: " + eElement.getTextContent());

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

2. ​SAX 解析

SAX(Simple API for XML)是一种基于事件的解析器,逐行读取 XML 文件,适合处理大型文件。

​优点:内存占用小,解析速度快。

​缺点:只能顺序访问,不支持随机访问。

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.*;

public class SAXExample {

public static void main(String[] args) {

try {

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() {

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {

System.out.println("Start Element: " + qName);

}

};

saxParser.parse(new File("person.xml"), handler);

} catch (Exception e) {

e.printStackTrace();

}

}

}

3. ​JAXB 解析

JAXB(Java Architecture for XML Binding)用于将 XML 数据绑定到 Java 对象,适合处理结构化数据。

​优点:自动映射,简化代码。

​缺点:需要提前定义 Java 类。

import javax.xml.bind.*;

import java.io.StringReader;

public class JAXBExample {

public static void main(String[] args) {

String xmlData = "John Doe30";

try {

JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

Person person = (Person) jaxbUnmarshaller.unmarshal(new StringReader(xmlData));

System.out.println(person.getName());

System.out.println(person.getAge());

} catch (JAXBException e) {

e.printStackTrace();

}

}

}

4. ​StAX 解析

StAX(Streaming API for XML)结合了 DOM 和 SAX 的优点,支持流式读取和写入。

​优点:内存效率高,灵活性好。

​缺点:代码复杂度较高。

import javax.xml.stream.*;

import java.io.FileInputStream;

public class StAXExample {

public static void main(String[] args) {

try {

XMLInputFactory factory = XMLInputFactory.newInstance();

XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream("person.xml"));

while (reader.hasNext()) {

int event = reader.next();

if (event == XMLStreamConstants.START_ELEMENT) {

System.out.println("Start Element: " + reader.getLocalName());

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

5. ​第三方库(如 DOM4J、XStream)​

​DOM4J:提供了更简洁的 API,适合复杂的 XML 操作。

​XStream:支持将 Java 对象与 XML 互相转换,适合序列化和反序列化。

总结

对于小型 XML 文件,推荐使用 ​DOM 或 ​JAXB。

对于大型 XML 文件,推荐使用 ​SAX 或 ​StAX。

如果需要灵活的对象映射,可以使用 ​XStream 或 ​DOM4J。

相关推荐

传奇世界圣言术能秒杀的怪物列表
bet体育365官网安全吗

传奇世界圣言术能秒杀的怪物列表

📅 11-01 👀 181
手机游戏盒子排行榜
365wm完美体育

手机游戏盒子排行榜

📅 07-16 👀 950
APP开发接入蓝牙功能需要注意哪些地方?
bet体育365官网安全吗

APP开发接入蓝牙功能需要注意哪些地方?

📅 07-21 👀 5643