最常用且推荐的方式是使用JAXB,需将List包装进带@XmlRootElement的容器类(如Users),再通过JAXBContext和Marshaller序列化为XML文件。

Java将List集合写入XML文件,最常用且推荐的方式是使用JAXB(Java Architecture for XML Binding),它原生支持Java对象与XML之间的双向转换,无需手动拼接字符串,安全、简洁、可维护性强。
前提:确保List中的元素类型支持JAXB
JAXB要求被序列化的类必须是“可绑定的”——即有无参构造方法、字段或属性有标准getter/setter、类上最好加@XmlRootElement注解。例如:
@XmlRootElement(name = "user")
public class User {
private String name;
private int age;
public User() {} // 必须有无参构造
// getter/setter 省略...
}
用JAXB将List写入XML文件(核心步骤)
因为JAXB不直接支持List
- 定义包装类Users,用@XmlRootElement标记,并用@XmlElement(name = "user")修饰List字段
- 创建JAXBContext,传入包装类(不是List本身)
- 获取Marshaller,设置格式化输出(可选),调用marshal()写入File或OutputStream
示例代码:
立即学习“Java免费学习笔记(深入)”;
@XmlRootElement(name = "users")
public class Users {
@XmlElement(name = "user")
private List list = new ArrayList<>();
public Users() {}
public Users(List list) { this.list = list; }
// getter/setter
public List getList() { return list; }
public void setList(List list) { this.list = list; }
}
// 写入XML文件
List userList = Arrays.asList(new User("张三", 25), new User("李四", 30));
Users users = new Users(userList);
try {
JAXBContext context = JAXBContext.newInstance(Users.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 美化缩进
marshaller.marshal(users, new File("users.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
替代方案:使用DOM或第三方库(如SimpleXML、Jackson XML)
若项目已引入其他XML库,或需更灵活控制结构,可考虑:
- DOM方式:手动构建Document树,适合简单场景,但代码冗长、易出错
- SimpleXML:轻量,注解风格类似JAXB,需额外依赖org.simpleframework:simple-xml
- Jackson XML:和JSON用法一致,需com.fasterxml.jackson.dataformat:jackson-dataformat-xml,对List支持更直接(可配置RootName)
注意事项
使用JAXB时注意:
- JDK 11+已默认移除JAXB模块,需显式添加Maven依赖:javax.xml.bind:jaxb-api + org.glassfish.jaxb:jaxb-runtime
- 中文字符需确保XML声明含encoding="UTF-8",JAXB默认生成的就是UTF-8,写入File时无需额外处理
- 字段为null时默认不输出;如需保留空标签,可用@XmlElement(nillable = true)
基本上就这些。用JAXB是最自然、最符合Java习惯的方式,只要包装好List,一行marshal就能搞定。










