杰瑞科技汇

Java XML 如何转 Excel?

Java XML 转 Excel 的几种方法

在 Java 中将 XML 数据转换为 Excel 文件有几种常用方法,以下是几种实现方式:

Java XML 如何转 Excel?-图1
(图片来源网络,侵删)

使用 Apache POI + DOM/SAX 解析

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
public class XmlToExcel {
    public static void main(String[] args) {
        try {
            // 1. 解析XML文件
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse(new File("input.xml"));
            // 2. 创建Excel工作簿
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("Data");
            // 3. 获取XML根元素
            Element root = document.getDocumentElement();
            NodeList nodeList = root.getChildNodes();
            // 4. 写入Excel
            int rowNum = 0;
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;
                    Row row = sheet.createRow(rowNum++);
                    // 假设每个子元素都是一列
                    NodeList childNodes = element.getChildNodes();
                    for (int j = 0; j < childNodes.getLength(); j++) {
                        Node childNode = childNodes.item(j);
                        if (childNode.getNodeType() == Node.ELEMENT_NODE) {
                            Cell cell = row.createCell(j);
                            cell.setCellValue(childNode.getTextContent());
                        }
                    }
                }
            }
            // 5. 保存Excel文件
            try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
                workbook.write(outputStream);
            }
            System.out.println("XML转Excel完成!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用 JAXB + Apache POI

如果XML有对应的Java类,可以使用JAXB进行转换:

import javax.xml.bind.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
public class JaxbToExcel {
    public static void main(String[] args) {
        try {
            // 1. 使用JAXB解组XML到Java对象
            JAXBContext jaxbContext = JAXBContext.newInstance(YourClass.class);
            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            YourClass root = (YourClass) unmarshaller.unmarshal(new File("input.xml"));
            // 2. 创建Excel工作簿
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("Data");
            // 3. 写入Excel数据
            // 这里需要根据你的Java对象结构来编写写入逻辑
            // ...
            // 4. 保存Excel文件
            try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
                workbook.write(outputStream);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用现成的库如 EasyExcel

阿里巴巴的EasyExcel库提供了更简洁的API:

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.*;
public class EasyExcelExample {
    public static void main(String[] args) {
        // 1. 解析XML到List对象
        List<YourDataModel> dataList = parseXmlToList("input.xml");
        // 2. 写入Excel
        String fileName = "output.xlsx";
        ExcelWriter excelWriter = EasyExcel.write(fileName, YourDataModel.class).build();
        WriteSheet writeSheet = EasyExcel.writerSheet("Data").build();
        excelWriter.write(dataList, writeSheet);
        excelWriter.finish();
    }
    private static List<YourDataModel> parseXmlToList(String xmlFilePath) {
        // 实现XML解析逻辑,返回List<YourDataModel>
        // 可以使用DOM、SAX或JAXB
        return new ArrayList<>();
    }
}

使用 XStream + Apache POI

import com.thoughtworks.xstream.XStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
public class XStreamToExcel {
    public static void main(String[] args) {
        try {
            // 1. 使用XStream解析XML
            XStream xstream = new XStream();
            xstream.processAnnotations(YourClass.class); // 如果使用注解
            YourClass root = (YourClass) xstream.fromXML(new File("input.xml"));
            // 2. 创建Excel工作簿
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("Data");
            // 3. 写入Excel数据
            // 根据你的对象结构编写写入逻辑
            // ...
            // 4. 保存Excel文件
            try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) {
                workbook.write(outputStream);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  1. XML结构:以上代码假设XML结构比较简单,实际应用中需要根据你的XML结构调整解析和写入逻辑
  2. 性能考虑:对于大型XML文件,建议使用SAX解析而不是DOM,以避免内存问题
  3. 依赖:需要添加相关库的依赖,如:
    • Apache POI: org.apache.poi:poi
    • JAXB: javax.xml.bind:jaxb-api
    • EasyExcel: com.alibaba:easyexcel
  4. 异常处理:实际应用中应添加更完善的异常处理

选择哪种方法取决于你的具体需求、XML的复杂程度以及项目的技术栈,对于简单转换,方法1足够;对于复杂结构,方法2或方法3可能更合适。

Java XML 如何转 Excel?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇