java如何读xml
读取XML文件的方法
在Java中读取XML文件可以通过多种方式实现,以下是几种常见的方法:
使用DOM解析器
DOM(Document Object Model)解析器将整个XML文档加载到内存中,形成树状结构,便于随机访问和修改。

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("file.xml");
NodeList nodeList = document.getElementsByTagName("tagName");
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getTextContent());
}
使用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.SAXParser;
import javax.xml.parsers.SAXParserFactory;
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxFactory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes) {
System.out.println("Start Element: " + qName);
}
public void endElement(String uri, String localName, String qName) {
System.out.println("End Element: " + qName);
}
public void characters(char ch[], int start, int length) {
System.out.println("Text: " + new String(ch, start, length));
}
};
saxParser.parse("file.xml", handler);
使用StAX解析器
StAX(Streaming API for XML)结合了DOM和SAX的优点,支持流式处理和随机访问。

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.FileReader;
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(new FileReader("file.xml"));
while (reader.hasNext()) {
int event = reader.next();
if (event == XMLStreamReader.START_ELEMENT) {
System.out.println("Start Element: " + reader.getLocalName());
}
}
使用JAXB(Java Architecture for XML Binding)
JAXB通过注解将Java对象与XML相互转换,适合处理结构化的XML数据。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.File;
JAXBContext context = JAXBContext.newInstance(ClassName.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
ClassName obj = (ClassName) unmarshaller.unmarshal(new File("file.xml"));
使用第三方库(如JDOM或DOM4J)
这些库提供了更简洁的API和更高效的操作方式。
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
SAXBuilder saxBuilder = new SAXBuilder();
Document document = saxBuilder.build("file.xml");
Element rootNode = document.getRootElement();
List<Element> list = rootNode.getChildren("tagName");
选择哪种方法取决于具体需求,如文件大小、性能要求和操作复杂度。






