解析xml文件并写入Excel表

类似于如下格式的xml数据,解析之后将数据写入Excel中

<?xml version="1.0" encoding="UTF-8"?>
<DATASETS><DATASET><education>undergraduate</education><occupation>programmer</occupation><name>张三</name><weight>150</weight><age>23</age><height>173</height><hobby>basketball</hobby></DATASET><DATASET><education>undergraduate</education><occupation>programmer</occupation><name>王一</name><weight>120</weight><age>22</age><height>168</height><hobby>game</hobby></DATASET><DATASET><education>undergraduate</education><occupation>programmer</occupation><name>魏某</name><weight>125</weight><age>22</age><height>170</height><hobby>novel</hobby></DATASET>
</DATASETS>

一. 构建springboot项目,导入依赖

 <!--JDom解析xml --><dependency><groupId>org.jdom</groupId><artifactId>jdom</artifactId><version>1.1.3</version></dependency><!--   读写Excel文件依赖     --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency>

二. 直接上方法

    /*** xml文件转为Excel文件* 返回:字符串* @param xmlPosition (xml文件的位置)* @param excelName (默认生成扩展名为xls的文件,默认位置生成在桌面)* @return*/public static void xmlToExcel(String xmlPosition,String excelName){//1.创建SAXBuilder对象SAXBuilder saxBuilder = new SAXBuilder();//2.创建输入流InputStream is = null;try {is = new FileInputStream(new File(xmlPosition));}catch (Exception e){e.printStackTrace();System.out.println("文件位置未找到!");return;}//3.将输入流加载到build中Document document = null;try {document = saxBuilder.build(is);}catch (Exception e){e.printStackTrace();System.out.println("文件内容构建失败!");System.out.println("请检查文件内容是否符合xml格式");}//4.获取根节点Element rootElement = document.getRootElement();//5.获取子节点List<Element> children = rootElement.getChildren();ArrayList<HashMap<String, Object>> list = new ArrayList<>();for (Element child : children) {// System.out.println("通过rollno获取属性值:"+child.getAttribute("属性名"));// List<Attribute> attributes = child.getAttributes();//打印属性// for (Attribute attr : attributes) {// System.out.println(attr.getName()+":"+attr.getValue());// }// 标签的属性,可以没有List<Element> childrenList = child.getChildren();HashMap<String, Object> map = new HashMap<>();for (Element o : childrenList) {// System.out.println("节点名:"+o.getName()+"---"+"节点值:"+o.getValue());map.put(o.getName(), o.getValue());}list.add(map);}// System.out.println(list);if (list.size() > 0){// 新建excel文件(如果存在就提示换个名字)File file = new File("C:\\Users\\Asus\\Desktop\\" + excelName + ".xls");if (file.exists()){System.out.println("该位置存在相同名字的文件,请重新命名!");return;}else {try {boolean newFile = file.createNewFile();if (newFile){System.out.println("文件创建成功!");System.out.println("开始导入数据!");HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("sheet1");for (int i = 0; i <= list.size(); i++) {HSSFRow row = sheet.createRow(i);if (i == 0){Set<Map.Entry<String, Object>> entries = list.get(i).entrySet();int j = 0;for (Map.Entry<String, Object> entry : entries) {HSSFCell cell = row.createCell(j);cell.setCellValue(entry.getKey());j++;}}else {Set<Map.Entry<String, Object>> entries = list.get(i-1).entrySet();int j = 0;for (Map.Entry<String, Object> entry : entries) {HSSFCell cell = row.createCell(j);cell.setCellValue(entry.getValue().toString());j++;}}}ByteArrayOutputStream os = new ByteArrayOutputStream();try {wb.write(os);}catch (IOException e){System.out.println("导入失败!");e.printStackTrace();}byte[] content = os.toByteArray();OutputStream fos = null;try {fos = new FileOutputStream(file);fos.write(content);os.close();fos.close();System.out.println("数据导入成功!");}catch (IOException e){System.out.println("导入失败!");e.printStackTrace();}}else {System.out.println("文件创建失败!");}} catch (IOException e) {e.printStackTrace();System.out.println("excel文件创建失败!");}}}else {System.out.println("源文件没有数据!");return;}

三. 最后excel文件

四. 扩展: 上面提到了写入excel,下面来试试读

public void pushData() {// 读取本地Excel表格数据File file = new File("excel文件的地址");Workbook wb = null;try {wb = readExcel(new FileInputStream(file), file.getName());Row row = null;if(wb != null){//获取第一个sheetSheet sheet = wb.getSheetAt(0);// 读取出来放在list里ArrayList<HashMap<String, Object>> list = new ArrayList<>();// 最大行数int rows = sheet.getPhysicalNumberOfRows();// 获取表格最后一行的行数int lastRowNum = sheet.getLastRowNum();// 获取第一行Row firstRow = sheet.getRow(0);// 获取第一行最后一列号short lastCellNum = firstRow.getLastCellNum();// 第一行第一列Cell cell = firstRow.getCell(0);// 第一行第一列的值String value = cell.getStringCellValue();// 根据实际情况可以把数据放在list中,通过行和列循环}} catch (FileNotFoundException e) {System.out.println("读取文件失败!");e.printStackTrace();}}public Workbook readExcel(InputStream is, String extString){Workbook wb = null;extString = extString.substring(extString.lastIndexOf("."));try {if(".xls".equals(extString)){return new HSSFWorkbook(is);}else if(".xlsx".equals(extString)){return new XSSFWorkbook(is);}else {return null;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return wb;}

java解析xml文件并写入Excel表相关推荐

  1. java解析xml文件

    使用java解析xml文件,通过dom4j. 代码如下: package com.java.team; import java.io.File; import java.util.ArrayList; ...

  2. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  3. java解析xml文件的几种方式(DOM解析)

    好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...

  4. Java解析xml文件dom4j篇(基于xml配置文件完成Excel数据的导入、导出功能完整实现)

    DOM4J解析XML文件 dom4j是一个Java的XML API,是jdom的升级产品,用来读写XML文件.另外对比其他API读写XML文件,dom4j是一个十分优秀的JavaXML API,具有性 ...

  5. Java 操作 xml 文件之写入

    对于 Java 对 xml 文件的读写,我在网上看了很多版本,结构差不多,根据自己的理解进行了一些总结. 写入数据到 xml 相对比较简单,我总结了以下两种写入方法,仅供参考! 1.dom4j 写入 ...

  6. 使用java解析XML文件的步骤

    以前的时候,也解析过,今天又拿出来解析就让忘记怎么解析了,后来在网上查还有自己想,终于解析出来了,下面就是原XML文件: accp.xml <?xml version="1.0&quo ...

  7. java解析xml文件:创建、读取、遍历、增删查改、保存

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用JDOM接口解析xml文件,包含创建.增删查改.保存,读取等操作. 需要引入jdom.jar,下载 xercesImpl.jar,下载 ...

  8. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到"解析xml文件"的需求.一般来讲,有基于DOM树和SAX的两种 ...

  9. java 解析xml文件案例

    package xmlTest;import javax.xml.parsers.*; import org.w3c.dom.*;public class GetXml {public static ...

最新文章

  1. linux怎么查看mysql安装在哪里_Linux下查看MySQL的安装路径
  2. java浮点整型数组_如何将C风格的二进制浮点数组读入Java?
  3. 62岁程序员植入逻辑炸弹, 面临10年监禁和25万美元罚款
  4. 力扣【下一个更大元素】leetcode-503.下一个更大元素 Ⅱ:单调栈解法+循环数组解法
  5. 必备技能,conda创建python虚拟环境,完美管理项目
  6. linux tar zcf打包时注意事项
  7. SqlSession的使用范围---Mybatis学习笔记(五)
  8. excel不显示0_Excel数字过长不能完整显示?超长数字变为0
  9. 计算机电力英语翻译,电力专业英语阅读与翻译..doc
  10. php composer源码打包,手把手教你发布自己的 Composer 包
  11. php修改学生信息代码_PHP程序员从入门到佛系第二十八弹:PHP $_POST 变量
  12. oracle数据库SQL防止超长,SQL Server和Oracle防止数据锁定的比较
  13. wordprss只显示一个当前主题 问题的解决
  14. kudu tablet的设计
  15. 杭州地铁四期尘埃落定和我预测差异,看地铁空白地,遥想地铁五期规划
  16. 免费中通快递对接快递鸟单号查询接口对接方法
  17. wps表格打印怎么铺满a4纸
  18. JAVA面向对象的基础知识
  19. html后代选择器的语法,后代选择器 | Descendant selectors
  20. 一阶RC低通滤波电路数字化

热门文章

  1. 实现在线播放Wav音频文件,支持IE和Google
  2. PowerMock注解PowerMockIgnore的使用方法
  3. python学习 之 笔记一
  4. 如何用Python求解微分方程组
  5. SSL双向验证--keytool实现自签名证书
  6. OpenGL--摄像机漫游
  7. 增加matlab内存大小,matlab扩大内存的方法
  8. 如何设置 Mac 键盘的打字音效?
  9. VS2017 生成DLL 供python 调用
  10. 什么是人工智能?什么是机器学习?什么是深度学习?三连问