//ReadFrData.java
package com.xie.xmlparse.dom4j;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
//从数据库中读出数据
import com.xie.conndb.ConnDb;
import com.xie.xmlparse.dom4j.modal.Student;
public class ReadFrData {
private List<Student> al=null;
public List<Student> getAl() {
return getDataFromMysql();
}
/**
* 从数据库中读取数据,放入Student中,然后把student放入list容器
* @author centre
* @return 返回一个list容器
*/
private List<Student> getDataFromMysql(){
try {
al=new ArrayList<Student>();
Connection ct=new ConnDb().getConnStu();
PreparedStatement ps=ct.prepareStatement("select studentinfo.*,class.claid from studentinfo,class where studentinfo.stuid=class.stuid");
ResultSet rs=ps.executeQuery();
while (rs.next()) {
Student s=new Student();
s.setClassId(rs.getLong(5));
s.setStuId(rs.getLong(1));
s.setStuName(rs.getString(2));
s.setStuSex(rs.getString(3));
s.setStuAge(rs.getInt(4));
al.add(s);
}
} catch (Exception e) {
System.out.println("getDataFromMysql异常");
e.printStackTrace();
}
return al;
}
}
//InsertToXml.java
package com.xie.xmlparse.dom4j;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import com.xie.xmlparse.dom4j.modal.Student;
//把从数据库中读到的数据,生成xml文件
public class InsertToXml {
private Set<Long> hset=null;
/**
* @athor centre
* @param pathname String 传入文件的路径名+文件名
* @return b xml文件生成成功返回true,否则返回false
*/
public boolean createXml(String pathname){
boolean b=false;
Document doc=DocumentHelper.createDocument();//创建document
Element schoolEle=doc.addElement("school");//添加根元素
schoolEle.addComment("文档的根school已经创建。");//添加注释
hset=new HashSet<Long>();
List<Student> al=new ReadFrData().getAl();
for (int i = 0; i < al.size(); i++) {
Student s=al.get(i);
hset.add(s.getClassId());
}
for (Iterator<Long> it = hset.iterator(); it.hasNext();) {
Long classId=it.next();
Element classEle=schoolEle.addElement("class");
classEle.addAttribute("name", classId+"");
for (int i = 0; i < al.size(); i++) {
Student s=al.get(i);
if (classId.equals(s.getClassId())) {
Element studentEle=classEle.addElement("student");
studentEle.addElement("stuid").addText(s.getStuId()+"");
studentEle.addElement("stuname").addText(s.getStuName());
studentEle.addElement("stusex").addText(s.getStuSex());
studentEle.addElement("stuage").addText(s.getStuAge()+"");
}
}
}
try {
/*自己查帮助文档
* OutputFormat format=new OutputFormat(" ",true,"gb2312");
*/
/*
* 创建一个漂亮的打印格式的OutputFormat
* 可以通过setEncoding来设置其传输字符串,默认为utf-8
*/
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
/*创建缩进格式的OutputFormat
format = OutputFormat.createCompactFormat();
*/
XMLWriter writer = new XMLWriter(new FileWriter(new File(pathname)),format);
writer.write(doc);
writer.close();
b=true;
} catch (IOException e) {
e.printStackTrace();
}
return b;
}
public static void main(String[] args){
String pathname="D://project//XmlParse//xmlFiles//centre.xml";
new InsertToXml().createXml(pathname);
}
}
源xml与生成的xml:编码改了,mysql数据库的编码为gb2312,源xml的编码为ut-8,当写入数据库时,在数据库中的中文并不能正确显示,但通过程序读取数据库中的中文能正确显示。用OutputFormat写xml时,默认的字符串编码为utf-8,生成的xml文件中的中文是乱码。为了能正确显示,改变了OutputFormat的编码,即改为gb2312就能正确显示。
//student.xml
<?xml version="1.0" encoding="UTF-8"?>
<school>
<class name="030713">
<student>
<stuid>03071300</stuid>
<stuname>小明</stuname>
<stusex>男</stusex>
<stuage>10</stuage>
</student>
<student>
<stuid>03071301</stuid>
<stuname>小花</stuname>
<stusex>女</stusex>
<stuage>20</stuage>
</student>
<student>
<stuid>03071302</stuid>
<stuname>不知道</stuname>
<stusex>男</stusex>
<stuage>15</stuage>
</student>
</class>
<class name="030714">
<student>
<stuid>03071400</stuid>
<stuname>小明</stuname>
<stusex>男</stusex>
<stuage>10</stuage>
</student>
<student>
<stuid>03071401</stuid>
<stuname>小花</stuname>
<stusex>女</stusex>
<stuage>20</stuage>
</student>
<student>
<stuid>03071402</stuid>
<stuname>不知道</stuname>
<stusex>男</stusex>
<stuage>15</stuage>
</student>
</class>
</school>
//centre.xml
<?xml version="1.0" encoding="gb2312"?>
<school>
<!--文档的根school已经创建。-->
<class name="30714">
<student>
<stuid>3071400</stuid>
<stuname>小明</stuname>
<stusex>男</stusex>
<stuage>10</stuage>
</student>
<student>
<stuid>3071401</stuid>
<stuname>小花</stuname>
<stusex>女</stusex>
<stuage>20</stuage>
</student>
<student>
<stuid>3071402</stuid>
<stuname>不知道</stuname>
<stusex>男</stusex>
<stuage>15</stuage>
</student>
</class>
<class name="30713">
<student>
<stuid>3071300</stuid>
<stuname>小明</stuname>
<stusex>男</stusex>
<stuage>10</stuage>
</student>
<student>
<stuid>3071301</stuid>
<stuname>小花</stuname>
<stusex>女</stusex>
<stuage>20</stuage>
</student>
<student>
<stuid>3071302</stuid>
<stuname>不知道</stuname>
<stusex>男</stusex>
<stuage>15</stuage>
</student>
</class>
</school>