从数据库中读取数据,并写入xml文件中(dom4j)

 

 

//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>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值