java 怎样解析 excel生成的xml文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎样解析 excel生成的xml文件相关的知识,希望对你有一定的参考价值。
java解析excel生成的xml文件的方法是使用dom4j实现的。dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。
1、excel生成的xml样例文件:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Created>2006-09-16T00:00:00Z</Created>
<LastSaved>2016-07-25T03:26:50Z</LastSaved>
<Version>14.00</Version>
</DocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
<RemovePersonalInformation/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>7956</WindowHeight>
<WindowWidth>14808</WindowWidth>
<WindowTopX>240</WindowTopX>
<WindowTopY>168</WindowTopY>
<ActiveSheet>2</ActiveSheet>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Bottom"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="s16" ss:Name="好">
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#006100"/>
<Interior ss:Color="#C6EFCE" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s17">
<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:Indent="1"
ss:WrapText="1"/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="8" ss:Color="#686868"/>
<NumberFormat ss:Format="@"/>
</Style>
<Style ss:ID="s18" ss:Parent="s16">
<Alignment ss:Vertical="Bottom"/>
</Style>
<Style ss:ID="s19">
<NumberFormat ss:Format="yyyy/m/d\ h:mm:ss"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="3" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="14.4">
<Row>
<Cell><Data ss:Type="String">工号</Data></Cell>
<Cell><Data ss:Type="String">姓名 </Data></Cell>
<Cell ss:Index="5"><Data ss:Type="String">工号</Data></Cell>
<Cell><Data ss:Type="String">姓名</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">111</Data></Cell>
<Cell><Data ss:Type="String">张三</Data></Cell>
<Cell ss:Index="5"><Data ss:Type="Number">111</Data></Cell>
<Cell ss:Formula="=VLOOKUP(R2C5:R3C5,RC[-5]:R[1]C[-4],2)"><Data
ss:Type="String">张三</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="Number">112</Data></Cell>
<Cell><Data ss:Type="String">李四</Data></Cell>
<Cell ss:Index="5"><Data ss:Type="Number">112</Data></Cell>
<Cell ss:Formula="=VLOOKUP(R2C5:R3C5,RC[-5]:R[1]C[-4],2)"><Data
ss:Type="String">李四</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>7</ActiveRow>
<ActiveCol>5</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
2、java解析代码:
import java.io.File;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo
public static void main(String[] args) throws Exception
SAXReader reader = new SAXReader();
Document document = reader.read(new File("person.xml"));
Element root = document.getRootElement();
Iterator it = root.elementIterator();
while (it.hasNext())
Element element = (Element) it.next();
//未知属性名称情况下
/*Iterator attrIt = element.attributeIterator();
while (attrIt.hasNext())
Attribute a = (Attribute) attrIt.next();
System.out.println(a.getValue());
*/
//已知属性名称情况下
System.out.println("id: " + element.attributeValue("id"));
//未知元素名情况下
/*Iterator eleIt = element.elementIterator();
while (eleIt.hasNext())
Element e = (Element) eleIt.next();
System.out.println(e.getName() + ": " + e.getText());
System.out.println();*/
//已知元素名情况下
System.out.println("title: " + element.elementText("title"));
System.out.println("author: " + element.elementText("author"));
System.out.println();
参考技术A python可以的,java有困难
新生成的xml文件名称使用excel文件名。 当然这个的前提得会解析excel文件,上一篇文章说了Python如何解析excel文件。这里使用python 自带的xml库:xml.dom来生成xml。
java 生成和解析xml
本文主要使用的是Jdom.jar包(包的下载百度一下)实现了生成xml文件和解析xml文件
下面是生成xml的实现
说明:stuLists集合是一个存放着Student对象的集合
1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.util.ArrayList; 6 7 import org.jdom.Document; 8 import org.jdom.Element; 9 import org.jdom.input.SAXBuilder; 10 import org.jdom.output.Format; 11 import org.jdom.output.XMLOutputter; 12 13 public class AddXml { 14 public static void main(String[] args) { 15 new AddXml().changeXml(); 16 } 17 public void changeXml(){ 18 Jdbc jdbc = new Jdbc(); 19 jdbc.addList(); 20 ArrayList<Student> stuLists = Jdbc.getStuList(); 21 22 Document docu = new Document(); 23 Element root = new Element("root"); 24 docu.addContent(root); 25 for (int i = 0; i < stuLists.size(); i++) { 26 // System.out.println(stuLists.get(i)); 27 Student s = stuLists.get(i); 28 29 Element info = new Element("info"); 30 Element student = new Element("student"); 31 Element id = new Element("id"); 32 Element name = new Element("name"); 33 Element sex = new Element("sex"); 34 Element age = new Element("age"); 35 36 Element book = new Element("book"); 37 Element bid = new Element("bid"); 38 Element bname = new Element("bname"); 39 Element bprice = new Element("bprice"); 40 Element bautor = new Element("bautor"); 41 book.addContent(bid); 42 book.addContent(bname); 43 book.addContent(bprice); 44 book.addContent(bautor); 45 46 student.addContent(id); 47 student.addContent(name); 48 student.addContent(sex); 49 student.addContent(age); 50 info.addContent(student); 51 info.addContent(book); 52 53 root.addContent(info); 54 int a = i+1; 55 String No = "000"+a; 56 student.setAttribute("No", No); 57 id.setText(s.getId()); 58 name.setText(s.getName()); 59 sex.setText(s.getSex()); 60 age.setText(s.getAge()); 61 62 String b="0"+a; 63 bid.setText(b); 64 bname.setText("java核心"); 65 bprice.setText("1334.0"); 66 bautor.setText("star"); 67 68 } 69 //格式化生成的xml文件,如果不进行格式化的话,生成的xml文件将会是很长的一行... 70 Format format = Format.getCompactFormat(); 71 format.setEncoding("utf-8"); 72 format.setIndent(" "); 73 XMLOutputter xo = new XMLOutputter(format); 74 try { 75 xo.output(docu, new FileOutputStream(new File("e:/io/stu.xml"))); 76 } catch (FileNotFoundException e) { 77 // TODO Auto-generated catch block 78 e.printStackTrace(); 79 } catch (IOException e) { 80 // TODO Auto-generated catch block 81 e.printStackTrace(); 82 } 83 System.out.println("生成xml文件成功!!!"); 84 } 85 }
结果如图所示:
下面是用java解析上面所写的xml文件
简写版
package com.direct.demo; import java.io.IOException; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; public class Saxxml { public static void main(String[] args) { //解析xml文档 SAXBuilder builder = new SAXBuilder(); Document docu = null; try { docu = builder.build("e:/io/student.xml"); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Element root = docu.getRootElement();//得到根目录 List stulist = root.getChildren(); System.out.println(stulist.size()+"-----------"); System.out.println("------------------读取xml文档的信息---------------------"); for (int i = 0; i < stulist.size(); i++) { Element e = (Element) stulist.get(i); String stuid; String stuname ; String stusex ; String stuage; /*String stuValues = e.getAttribute("No").getValue();//属性值 String stuValues1 = e.getAttributeValue("No"); if (stuValues.equals("102")) { //修改姓名 System.out.println(stuValues); e.getChild("stuname").setText("砖石王老五"); //删除元素 root.removeContent(e); break; }*/ if (i==0) { stuid = e.getChildText("stuid"); stuname = e.getChildText("stuname"); stusex = e.getChildText("stusex"); stuage = e.getChildText("stuage"); }else { stuid = e.getChildText("stuid"+i); stuname = e.getChildText("stuname"+i); stusex = e.getChildText("stusex"+i); stuage = e.getChildText("stuage"+i); } System.out.println("属性:"+e.getAttributeValue("No")); System.out.println("学号:"+stuid); System.out.println("姓名:"+stuname); System.out.println("年龄:"+stuage); System.out.println("性别:"+stusex); System.out.println("--------------------"); } } }
以上是关于java 怎样解析 excel生成的xml文件的主要内容,如果未能解决你的问题,请参考以下文章
java中excel转换成xml,怎样自定义excel的列为属性,或者值