用Java读取XML文件并将数据写入Excel

在日常的开发工作中,我们经常会遇到需要读取XML文件中的数据,并将这些数据写入Excel表格的情况。本文将介绍如何使用Java语言实现这一功能。

准备工作

在开始之前,我们需要准备一个示例的XML文件和一个Excel表格作为输出目标。假设我们有一个名为data.xml的XML文件,内容如下:

<students>
    <student>
        <name>Alice</name>
        <age>20</age>
        <grade>A</grade>
    </student>
    <student>
        <name>Bob</name>
        <age>22</age>
        <grade>B</grade>
    </student>
</students>

我们还需要一个空的Excel表格,用于将XML中的数据写入其中。

读取XML文件

首先,我们需要使用Java的DOM解析器来读取XML文件中的数据。下面是一个读取data.xml文件的示例代码:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;

public class ReadXML {
    public static void main(String[] args) {
        try {
            File inputFile = new File("data.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(inputFile);
            
            doc.getDocumentElement().normalize();
            
            NodeList nodeList = doc.getElementsByTagName("student");
            
            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);
                
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;
                    String name = element.getElementsByTagName("name").item(0).getTextContent();
                    String age = element.getElementsByTagName("age").item(0).getTextContent();
                    String grade = element.getElementsByTagName("grade").item(0).getTextContent();
                    
                    // 将数据写入Excel表格
                    writeToExcel(name, age, grade);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static void writeToExcel(String name, String age, String grade) {
        // 将数据写入Excel表格的代码
    }
}

在上面的代码中,我们使用了Java的DOM解析器来读取XML文件中每个学生的姓名、年龄和成绩,并将这些数据传递给writeToExcel方法。

将数据写入Excel

接下来,我们需要实现writeToExcel方法,将XML文件中的数据写入Excel表格。这里我们将使用Apache POI库来操作Excel文件。下面是一个简单的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;

private static void writeToExcel(String name, String age, String grade) {
    try {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Students");
        
        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("Name");
        header.createCell(1).setCellValue("Age");
        header.createCell(2).setCellValue("Grade");
        
        Row row = sheet.createRow(sheet.getLastRowNum() + 1);
        row.createCell(0).setCellValue(name);
        row.createCell(1).setCellValue(age);
        row.createCell(2).setCellValue(grade);
        
        FileOutputStream fileOut = new FileOutputStream("output.xlsx");
        workbook.write(fileOut);
        fileOut.close();
        workbook.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在上面的代码中,我们创建了一个Excel工作簿,并在工作簿中创建一个名为Students的工作表。然后,我们将XML文件中的每个学生的姓名、年龄和成绩写入Excel表格中,并将结果保存为output.xlsx文件。

完整示例

现在我们已经完成了读取XML文件并将数据写入Excel的功能。下面是一个完整的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class XMLToExcel {
    public static void main(String[] args) {
        try {
            File inputFile =