java如何解析xml
解析XML的常用方法
Java提供了多种解析XML的方式,主要包括DOM、SAX、StAX和JAXB。以下是具体实现方法:
使用DOM解析
DOM将整个XML文档加载到内存中形成树状结构,适合小型XML文件:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("file.xml"));
NodeList nodeList = document.getElementsByTagName("elementName");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String value = element.getTextContent();
}
}
使用SAX解析
SAX基于事件驱动,内存占用小,适合大型XML文件:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bElement = false;
public void startElement(String uri, String localName,
String qName, Attributes attributes) {
if (qName.equalsIgnoreCase("elementName")) {
bElement = true;
}
}
public void characters(char[] ch, int start, int length) {
if (bElement) {
String value = new String(ch, start, length);
bElement = false;
}
}
};
saxParser.parse("file.xml", handler);
使用StAX解析
StAX是拉式解析API,提供了更灵活的控制:
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader eventReader = factory.createXMLEventReader(new FileReader("file.xml"));
while (eventReader.hasNext()) {
XMLEvent event = eventReader.nextEvent();
if (event.isStartElement()) {
StartElement startElement = event.asStartElement();
if (startElement.getName().getLocalPart().equals("elementName")) {
event = eventReader.nextEvent();
String value = event.asCharacters().getData();
}
}
}
使用JAXB解析
JAXB通过注解将XML映射到Java对象,适合结构化数据:
@XmlRootElement
class Person {
@XmlElement
private String name;
// getters/setters
}
JAXBContext context = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Person person = (Person) unmarshaller.unmarshal(new File("file.xml"));
选择解析方式的考虑因素
- DOM适合需要频繁修改XML或随机访问节点的场景
- SAX/StAX适合处理大型XML文件或内存受限环境
- JAXB适合XML与Java对象需要双向转换的场景
每种方法都有其优缺点,应根据具体需求选择合适的解析方式。






