Java List 转换为 XML
在 Java 中,将 List 转换为 XML 有多种方法,以下是几种常见的实现方式:
使用 JAXB (Java Architecture for XML Binding)
JAXB 是 Java 标准库中用于 XML 绑定的 API,适合将 Java 对象(包括 List)转换为 XML。
示例代码
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
// 定义要转换的类
class Person {
private String name;
private int age;
// 构造方法、getter和setter
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
public class ListToXml {
public static void main(String[] args) {
// 创建List
List<Person> people = new ArrayList<>();
people.add(new Person("张三", 30));
people.add(new Person("李四", 25));
try {
// 创建JAXB上下文
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
// 创建Marshaller
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 创建StringWriter来存储XML结果
StringWriter writer = new StringWriter();
// 将List转换为XML
marshaller.marshal(people, writer);
// 输出XML
System.out.println(writer.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
输出结果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<personList>
<person>
<name>张三</name>
<age>30</age>
</person>
<person>
<name>李四</name>
<age>25</age>
</person>
</personList>
使用 DOM API 手动构建 XML
如果不想使用 JAXB,可以使用 Java 的 DOM API 手动构建 XML 文档。
示例代码
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
public class ListToXmlDom {
public static void main(String[] args) {
// 创建List
List<String> items = new ArrayList<>();
items.add("苹果");
items.add("香蕉");
items.add("橙子");
try {
// 创建DocumentBuilder
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// 创建Document
Document doc = docBuilder.newDocument();
// 创建根元素
Element rootElement = doc.createElement("fruits");
doc.appendChild(rootElement);
// 遍历List并创建XML元素
for (String item : items) {
Element itemElement = doc.createElement("fruit");
itemElement.appendChild(doc.createTextNode(item));
rootElement.appendChild(itemElement);
}
// 创建Transformer
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// 转换为String
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
// 输出XML
System.out.println(writer.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fruits>
<fruit>苹果</fruit>
<fruit>香蕉</fruit>
<fruit>橙子</fruit>
</fruits>
使用第三方库(如 XStream)
XStream 是一个流行的第三方库,可以轻松地将 Java 对象序列化为 XML。
添加依赖(Maven)
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.18</version>
</dependency>
示例代码
import com.thoughtworks.xstream.XStream;
import java.util.ArrayList;
import java.util.List;
public class ListToXmlXStream {
public static void main(String[] args) {
// 创建List
List<Person> people = new ArrayList<>();
people.add(new Person("王五", 35));
people.add(new Person("赵六", 28));
// 创建XStream实例
XStream xstream = new XStream();
// 设置别名(可选)
xstream.alias("person", Person.class);
xstream.alias("people", List.class);
// 转换为XML
String xml = xstream.toXML(people);
// 输出XML
System.out.println(xml);
}
}
输出结果
<people>
<person>
<name>王五</name>
<age>35</age>
</person>
<person>
<name>赵六</name>
<age>28</age>
</person>
</people>
使用 Simple XML 框架
Simple XML 是另一个流行的 XML 绑定框架。
添加依赖(Maven)
<dependency>
<groupId>org.simpleframework</groupId>
<artifactId>simple-xml</artifactId>
<version>2.7.1</version>
</dependency>
示例代码
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.core.Persister;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
@Root
class People {
@ElementList(inline = true)
private List<Person> people;
public People() {
this.people = new ArrayList<>();
}
public void addPerson(Person person) {
this.people.add(person);
}
}
public class ListToXmlSimple {
public static void main(String[] args) {
// 创建People对象
People peopleList = new People();
peopleList.addPerson(new Person("钱七", 40));
peopleList.addPerson(new Person("孙八", 22));
try {
// 创建Persister
Persister persister = new Persister();
// 转换为XML
StringWriter writer = new StringWriter();
persister.write(peopleList, writer);
// 输出XML
System.out.println(writer.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果
<people>
<person>
<name>钱七</name>
<age>40</age>
</person>
<person>
<name>孙八</name>
<age>22</age>
</person>
</people>
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| JAXB | Java标准库,无需额外依赖 | 需要为每个类添加注解 | 标准Java项目,需要XML绑定 |
| DOM API | 灵活,完全控制XML结构 | 代码较多,繁琐 | 需要精细控制XML结构 |
| XStream | 简单易用,无需注解 | 第三方库,需要添加依赖 | 快速开发,不需要复杂配置 |
| Simple XML | 简单,性能较好 | 第三方库,需要添加依赖 | 需要高性能的XML处理 |
选择哪种方法取决于你的具体需求,如项目是否允许使用第三方库、是否需要精细控制XML结构等。
