杰瑞科技汇

Java对象如何转XML字符串?

Java 对象转 XML 字符串

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

Java对象如何转XML字符串?-图1
(图片来源网络,侵删)

使用 JAXB (Java Architecture for XML Binding)

JAXB 是 Java 标准库中内置的 XML 绑定 API,适用于 Java 8 及更高版本。

步骤:

  1. 创建实体类,并添加 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; }
}
  1. 转换代码
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();
    }
}
  1. 使用示例
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。

步骤:

  1. 添加依赖 (Maven):
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.18</version>
</dependency>
  1. 转换代码
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);
    }
}
  1. 使用示例
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,需要额外依赖。

步骤:

  1. 添加依赖 (Maven):
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.13.0</version>
</dependency>
  1. 转换代码
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);
    }
}
  1. 使用示例
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。

Java对象如何转XML字符串?-图2
(图片来源网络,侵删)
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 是不错的选择。

分享:
扫描分享到社交APP
上一篇
下一篇