杰瑞科技汇

Java List如何转XML?

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结构等。

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