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生成解析xml的另外两种方法JAXB

java生成解析xml的另外两种方法JAXB

java中excel转换成xml,怎样自定义excel的列为属性,或者值

如何读取xml文件导出为excel文件

JAVA 生成xml格式,具体格式如下,请问JAVA方法怎么写

利用java怎么实现生成报表(Excel文件)