Java 对象转 XML 字符串
在 Java 中,将对象转换为 XML 字符串有几种常见方法,以下是几种主流的实现方式:

使用 JAXB (Java Architecture for XML Binding)
JAXB 是 Java 标准库中内置的 XML 绑定 API,适用于 Java 8 及更高版本。
步骤:
- 创建实体类,并添加 JAXB 注解:
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
@XmlRootElement
public class User {
private String name;
private int age;
private String email;
@XmlElement
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@XmlElement
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@XmlElement
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
- 转换代码:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class ObjectToXml {
public static String convertToXml(Object obj) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
return writer.toString();
}
}
- 使用示例:
public class Main {
public static void main(String[] args) {
User user = new User();
user.setName("张三");
user.setAge(30);
user.setEmail("zhangsan@example.com");
try {
String xml = ObjectToXml.convertToXml(user);
System.out.println(xml);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
使用 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;
public class ObjectToXml {
public static String convertToXml(Object obj) {
XStream xstream = new XStream();
// 配置别名(可选)
xstream.alias("user", User.class);
return xstream.toXML(obj);
}
}
- 使用示例:
public class Main {
public static void main(String[] args) {
User user = new User();
user.setName("李四");
user.setAge(25);
user.setEmail("lisi@example.com");
String xml = ObjectToXml.convertToXml(user);
System.out.println(xml);
}
}
使用 Jackson
Jackson 也可以处理 XML,需要额外依赖。
步骤:
- 添加依赖 (Maven):
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.13.0</version>
</dependency>
- 转换代码:
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class ObjectToXml {
public static String convertToXml(Object obj) throws Exception {
XmlMapper xmlMapper = new XmlMapper();
return xmlMapper.writeValueAsString(obj);
}
}
- 使用示例:
public class Main {
public static void main(String[] args) {
User user = new User();
user.setName("王五");
user.setAge(35);
user.setEmail("wangwu@example.com");
try {
String xml = ObjectToXml.convertToXml(user);
System.out.println(xml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 DOM API 手动构建
如果需要更精细的控制,可以使用 Java 的 DOM API 手动构建 XML。

import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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;
public class ObjectToXml {
public static String convertToXml(User user) throws Exception {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
doc.setXmlVersion("1.0");
// 创建根元素
Element rootElement = doc.createElement("user");
doc.appendChild(rootElement);
// 添加子元素
Element name = doc.createElement("name");
name.appendChild(doc.createTextNode(user.getName()));
rootElement.appendChild(name);
Element age = doc.createElement("age");
age.appendChild(doc.createTextNode(String.valueOf(user.getAge())));
rootElement.appendChild(age);
Element email = doc.createElement("email");
email.appendChild(doc.createTextNode(user.getEmail()));
rootElement.appendChild(email);
// 转换为字符串
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
return writer.toString();
}
}
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| JAXB | Java标准库,无需额外依赖 | 需要注解,配置稍复杂 | 简单对象转换,Java环境 |
| XStream | 简单易用,灵活 | 需要第三方库 | 快速实现,复杂对象 |
| Jackson | 性能好,支持多种格式 | 需要额外依赖 | 已使用Jackson项目 |
| DOM API | 完全控制XML结构 | 代码量大,繁琐 | 需要精细控制XML结构 |
选择哪种方法取决于你的具体需求、项目环境以及对XML格式的控制要求,对于大多数应用场景,JAXB 或 XStream 是不错的选择。
