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

如何读取xml文件导出为excel文件,第1张

给你一种jsp的方法
在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>
你可以参考一下链接,然后拷贝代码,这里我直接拷贝带上行号。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13375677.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存