Java读写XML文件时,有哪些高效且实用的方法与技巧?
- 后端开发
- 2025-10-23
- 6
Java读写XML文件是一个常见的需求,无论是使用DOM、SAX还是JAXB,都有不同的方法可以实现,以下是使用DOM、SAX和JAXB进行XML文件读写的基本方法。
使用DOM解析和写入XML文件
DOM(Document Object Model)是XML文件的一种结构化表示,允许程序直接访问XML文件中的任何部分。

读取XML文件
- 加载XML文件为DOM对象。
- 使用DOM对象遍历XML结构。
- 提取所需的数据。
以下是一个示例代码:
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Node; public class DOMRead { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("example.xml"); NodeList nodeList = document.getElementsByTagName("item"); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; String name = element.getElementsByTagName("name").item(0).getTextContent(); String price = element.getElementsByTagName("price").item(0).getTextContent(); System.out.println("Name: " + name + ", Price: " + price); } } } catch (Exception e) { e.printStackTrace(); } } }
写入XML文件
- 创建一个新的DOM对象。
- 添加元素和属性。
- 将DOM对象写入XML文件。
以下是一个示例代码:
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class DOMWrite { public static void main(String[] args) throws ParserConfigurationException, TransformerException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.newDocument(); Element root = document.createElement("items"); document.appendChild(root); Element item = document.createElement("item"); root.appendChild(item); Element name = document.createElement("name"); name.appendChild(document.createTextNode("Apple")); item.appendChild(name); Element price = document.createElement("price"); price.appendChild(document.createTextNode("1.5")); item.appendChild(price); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource domSource = new DOMSource(document); StreamResult streamResult = new StreamResult(new java.io.File("output.xml")); transformer.transform(domSource, streamResult); } }
使用SAX解析XML文件
SAX(Simple API for XML)是一种基于事件的解析方法,适用于大型XML文件。
读取XML文件
- 创建一个SAX解析器。
- 实现XMLReader接口。
- 在事件处理方法中处理数据。
以下是一个示例代码:
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; public class SAXRead { public static void main(String[] args) { try { XMLReader xmlReader = XMLReaderFactory.createXMLReader(); xmlReader.setContentHandler(new DefaultHandler() { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("item".equals(qName)) { System.out.println("Start Element: " + qName); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("item".equals(qName)) { System.out.println("End Element: " + qName); } } @Override public void characters(char ch[], int start, int length) throws SAXException { System.out.println("Character data: " + new String(ch, start, length)); } }); xmlReader.parse("example.xml"); } catch (Exception e) { e.printStackTrace(); } } }
使用JAXB解析和写入XML文件
JAXB(Java Architecture for XML Binding)允许将Java对象和XML数据绑定在一起。

读取XML文件
- 创建一个类,映射XML结构。
- 使用JAXB的Unmarshaller类读取XML文件。
以下是一个示例代码:
import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.io.File; public class JAXBRead { public static void main(String[] args) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Item.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Item item = (Item) unmarshaller.unmarshal(new File("example.xml")); System.out.println("Name: " + item.getName() + ", Price: " + item.getPrice()); } catch (Exception e) { e.printStackTrace(); } } } class Item { private String name; private double price; // Getters and Setters }
写入XML文件
- 创建一个类,映射XML结构。
- 使用JAXB的Marshaller类写入XML文件。
以下是一个示例代码:
import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import java.io.File; public class JAXBWrite { public static void main(String[] args) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Item.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); Item item = new Item(); item.setName("Apple"); item.setPrice(1.5); marshaller.marshal(item, new File("output.xml")); } catch (Exception e) { e.printStackTrace(); } } }
FAQs
Q1: 什么是DOM和SAX?
A1: DOM(Document Object Model)是一种将XML文件作为树状结构表示的方法,允许程序直接访问XML文件中的任何部分,SAX(Simple API for XML)是一种基于事件的解析方法,适用于大型XML文件,通过事件处理来读取XML文件。
Q2: 为什么使用JAXB?
A2: JAXB(Java Architecture for XML Binding)允许将Java对象和XML数据绑定在一起,简化了XML文件的处理,使用JAXB可以自动将XML数据映射到Java对象,反之亦然,这使得代码更加简洁,易于维护。
