java如何解析xml
解析XML的常用方法
Java提供了多种解析XML的方式,主要分为DOM、SAX、StAX和JAXB等。每种方法适用于不同场景,可根据需求选择。
DOM解析
DOM(Document Object Model)将整个XML文档加载到内存中,形成树状结构,适合对文档进行频繁读写操作。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("file.xml"));
NodeList nodeList = document.getElementsByTagName("element");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
System.out.println(node.getTextContent());
}
DOM解析消耗内存较大,不适合处理大文件。
SAX解析
SAX(Simple API for XML)基于事件驱动,逐行读取XML文件,适合只读操作和大文件处理。

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes) {
System.out.println("Start Element: " + qName);
}
};
parser.parse(new File("file.xml"), handler);
SAX解析内存消耗小,但无法随机访问节点。
StAX解析
StAX(Streaming API for XML)结合了DOM和SAX的优点,提供指针式API和迭代式API两种方式。

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(new FileInputStream("file.xml"));
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
StartElement startElement = event.asStartElement();
System.out.println("Start Element: " + startElement.getName());
}
}
StAX性能较好,适合需要同时读取和写入的场景。
JAXB解析
JAXB(Java Architecture for XML Binding)通过注解将Java对象与XML相互转换,适合面向对象开发。
@XmlRootElement
class Person {
@XmlElement
private String name;
// getters and setters
}
JAXBContext context = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Person person = (Person) unmarshaller.unmarshal(new File("file.xml"));
JAXB简化了对象与XML的映射,但需要预先定义好Java类结构。
选择建议
需要频繁修改XML或随机访问节点时选择DOM;处理大文件或只读操作选择SAX;需要平衡读写性能选择StAX;面向对象开发优先考虑JAXB。根据具体场景选择最合适的解析方式。






