在JSP中如何把xml文件中的数据导出到excel中,其实就是通过Java如何把xml中的数据导出到excel中。
要解决这个问题分为两步。
第一步,通过java把数据从xml文件中读出来。这个在Java中是一个很普通很普遍的问题,使用任意一个Java的xml解析库(比如jdom,dom4j等)都可以完成。
第二步,数据从xml文件读出后,就需要把数据写入excel文件。这个问题其实就是在java如何 *** 作excel文件。
在Java中 *** 作Excel文件,目前大致有三种方法。
第一种,使用第三方的库,比如
Java Excel API
>// 给你一个例子,你参考下
// java通过dom读写xml文件
/要读的xml文件
<xml version="10" encoding="GB2312">
<学生花名册>
<学生 性别 = "男">
<姓名>李华</姓名>
<年龄>14</年龄>
</学生>
<学生 性别 = "男">
<姓名>张三</姓名>
<年龄>16</年龄>
</学生>
</学生花名册>
/
package xml;
import javaioFileOutputStream;
import javaioOutputStreamWriter;
import javaioWriter;
import javautilIterator;
import javautilVector;
import javaxxmlparsersDocumentBuilder;
import javaxxmlparsersDocumentBuilderFactory;
import javaxxmltransformOutputKeys;
import javaxxmltransformResult;
import javaxxmltransformSource;
import javaxxmltransformTransformer;
import javaxxmltransformTransformerConfigurationException;
import javaxxmltransformTransformerException;
import javaxxmltransformTransformerFactory;
import javaxxmltransformdomDOMSource;
import javaxxmltransformstreamStreamResult;
import orgw3cdomDocument;
import orgw3cdomElement;
import orgw3cdomNode;
import orgw3cdomNodeList;
import orgw3cdomText;
public class DomTest {
Vector students_Vector;
private Vector readXMLFile(String file) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();
DocumentBuilder builder = dbfnewDocumentBuilder();
Document doc = builderparse(file); // 获取到xml文件
// 下面开始读取
Element root = docgetDocumentElement(); // 获取根元素
NodeList students = rootgetElementsByTagName_r("学生");
students_Vector = new Vector();
for (int i = 0; i < studentsgetLength(); i++) {
// 一次取得每一个学生元素
Element ss = (Element) studentsitem(i);
// 创建一个学生的实例
student stu = new student();
stusetSex(ssgetAttribute("性别"));
NodeList names = ssgetElementsByTagName_r("姓名");
Element e = (Element) namesitem(0);
Node t = egetFirstChild();
stusetName(tgetNodeValue());
NodeList ages = ssgetElementsByTagName_r("年龄");
e = (Element) agesitem(0);
t = egetFirstChild();
stusetAge(IntegerparseInt(tgetNodeValue()));
students_Vectoradd(stu);
}
return students_Vector;
}
// 写入xml文件
public static void callWriteXmlFile(Document doc, Writer w, String encoding) {
try {
Source source = new DOMSource(doc);
Result result = new StreamResult(w);
Transformer xformer = TransformerFactorynewInstance()
newTransformer();
xformersetOutputProperty(OutputKeysENCODING, encoding);
xformertransform(source, result);
} catch (TransformerConfigurationException e) {
eprintStackTrace();
} catch (TransformerException e) {
eprintStackTrace();
}
}
private void writeXMLFile(String outfile) {
DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();
DocumentBuilder builder = null;
try {
builder = dbfnewDocumentBuilder();
} catch (Exception e) {
}
Document doc = buildernewDocument();
Element root = doccreateElement("学生花名册");
docappendChild(root); // 将根元素添加到文档上
// 获取学生信息
for (int i = 0; i < students_Vectorsize(); i++) {
student s = (student) students_Vectorget(i);
// 创建一个学生
Element stu = doccreateElement("学生");
stusetAttribute("性别", sgetSex());
rootappendChild(stu);// 添加属性
// 创建文本姓名节点
Element name = doccreateElement("姓名");
stuappendChild(name);
Text tname = doccreateTextNode(sgetName());
nameappendChild(tname);
//创建文本年龄节点
Element age = doccreateElement("年龄");
stuappendChild(age); // 将age添加到学生节点上
Text tage = doccreateTextNode(StringvalueOf(sgetAge()));
ageappendChild(tage); // 将文本节点放在age节点上
}
try {
FileOutputStream fos = new FileOutputStream(outfile);
OutputStreamWriter outwriter = new OutputStreamWriter(fos);
// ((XmlDocument)doc)write(outwriter); //出错!
callWriteXmlFile(doc, outwriter, "gb2312");
outwriterclose();
fosclose();
} catch (Exception e) {
eprintStackTrace();
}
}
public static void main(String args[]) {
String str = "xml/studentxml";
DomTest t = new DomTest();
try {
Vector v = treadXMLFile(str);
Iterator it = viterator();
while (ithasNext()) {
student s = (student) itnext();
Systemoutprintln(sgetName() + "\t" + sgetAge() + "\t"
+ sgetSex());
}
} catch (Exception e) {
eprintStackTrace();
}
String outfile = "xml/stucopyxml";
twriteXMLFile(outfile);
}
}
class student{
private String sex;
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
thisage = age;
}
public void setSex(String s){sex=s;}
public String getSex(){return sex;}
public void setName(String n){name=n;}
public String getName(){return name;}
}以下是我的答案,希望对你有帮助。
SAXReader xmlReader = new SAXReader();
try {
Document doc = xmlReaderread(new File("F:\\bookconfigxml")); //读取xml配置文件
Element root = docgetRootElement(); //获取根节点
List<Element> elements = rootelements(); //获取根节点下的所有子节点
for(Element element : elements){ //遍历子节点
Systemoutprintln("节点名:"+elementgetName()+",节点内文本:"+elementgetData());
}
} catch (DocumentException e) {
eprintStackTrace();
}1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。 2)SAX SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。 选择DOM还是选择SAX? 对于需要自己编写代码来处理XML文档的开发人员来说, 选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。 DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。3)JDOM >import javaioFile;
import javaxxmlparsersDocumentBuilder;
import javaxxmlparsersDocumentBuilderFactory;
import orgw3cdomDocument;
import orgw3cdomElement;
import orgw3cdomNodeList;
public class Xml {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
newInstance();
DocumentBuilder builder = factorynewDocumentBuilder();
Document document = builderparse(new File("E:\\新建 文本文档 (3)xml"));
Element rootElement = documentgetDocumentElement();
NodeList list = rootElementgetElementsByTagName("Header");
Element element = (Element) listitem(0);
Systemoutprintln(elementgetChildNodes()item(0)getNodeValue());
} catch (Exception e) {
Systemoutprintln("exception:" + egetMessage());
}
}
}2/
1 desciption:java create xml file
2 author:maomao
3 datetime:2007/04/04 23:42
4 /
5
6package comxhxml;
1
2import javaioFileOutputStream;
1import javaioIOException;
1import orgjdomDocument;
1import orgjdomElement;
1import orgjdomJDOMException;
1import orgjdomoutputXMLOutputter;
1
2public class Java2XML {
1
2 public void BuildXMLDoc() throws IOException, JDOMException {
3
4 // 创建根节点 list;
5 Element root = new Element("list");
6
7 // 根节点添加到文档中;
8 Document Doc = new Document(root);
9
10 // 此处 for 循环可替换成 遍历 数据库表的结果集 *** 作;
11 for (int i = 0; i < 5; i++) {
12
13 // 创建节点 user;
14 Element elements = new Element("user");
15
16 // 给 user 节点添加属性 id;
17 elementssetAttribute("id", "" + i);
18
19 // 给 user 节点添加子节点并赋值;
20 // new Element("name")中的 "name" 替换成表中相应字段,setText("xuehui")中 "xuehui 替换成表中记录值;
21 elementsaddContent(new Element("name")setText("xuehui"));
22 elementsaddContent(new Element("age")setText("28"));
23 elementsaddContent(new Element("sex")setText("Male"));
24
25 // 给父节点list添加user子节点;
26 rootaddContent(elements);
27
28 }
29 XMLOutputter XMLOut = new XMLOutputter();
30
31 // 输出 userxml 文件;
32 XMLOutoutput(Doc, new FileOutputStream("userxml"));
33 }
34
35 public static void main(String[] args) {
36 try {
37 Java2XML j2x = new Java2XML();
38 Systemoutprintln("生成 mxl 文件");
39 j2xBuildXMLDoc();
40 } catch (Exception e) {
41 eprintStackTrace();
42 }
43 }
44
45}
生成结果:
# <xml version="10" encoding="UTF-8">
# <list>
# <user id="0">
# <name>xuehui</name>
# <age>28</age>
# <sex>Male</sex>
# </user>
# <user id="1">
# <name>xuehui</name>
# <age>28</age>
# <sex>Male</sex>
# </user>
# <user id="2">
# <name>xuehui</name>
# <age>28</age>
# <sex>Male</sex>
# </user>
# <user id="3">
# <name>xuehui</name>
# <age>28</age>
# <sex>Male</sex>
# </user>
# <user id="4">
# <name>xuehui</name>
# <age>28</age>
# <sex>Male</sex>
# </user>
# </list>
你可以参考一下链接,然后拷贝代码,这里我直接拷贝带上行号。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)