用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 =