转载 通过DOM4J将数据库的表转换为XML文档
实现代码如下:
package com.cjh.dom4j;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Students {
public static ResultSet Query(String str){ //返回所查询的数据集
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=cjh", "sa", "");
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(str);
return rs;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void writeXML(Document doc,String xmlName){ //创建XML文档
try {
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("gb2312");
XMLWriter xmlw=new XMLWriter(new FileWriter(xmlName),output);
xmlw.write(doc);
xmlw.close();
System.out.println("创建成功....");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* sql:表示sql语句,要查询的表信息
* rootElementName:表示根元素的名称
* eleElement:表示根元素下的第一个子元素,
* xmlName:表示要保存的xml文件名
*/
public void createXML(String sql,String rootElementName,String eleElement,String xmlName){
//sql="select * from student";
//rootElementName="students";
ResultSet rs=Query(sql); //返回所查询的数据集
try {
if(rs!=null){
Document doc=DocumentHelper.createDocument();
Element eleroot=doc.addElement(rootElementName); //添加根元素
ResultSetMetaData rsmd=rs.getMetaData();
int colshu=rsmd.getColumnCount(); //取得列数
while(rs.next()){ //以下是为子元素添加元素和内容
Element element=eleroot.addElement(eleElement); //为根元素添加子元素(有多少条记录则有多少子元素)
for(int i=1;i<=colshu;i++){
//String colName=rsmd.getColumnName(i); //取得当前列名
//从子元素中添加元素(列名)和元素的文本(列值) 以下是为子元素添加元素
Element ele=element.addElement(rsmd.getColumnName(i)).addText(rs.getString(i));
}
}
// OutputFormat output=OutputFormat.createPrettyPrint();
// output.setEncoding("gb2312");
// XMLWriter xmlw=new XMLWriter(new FileWriter(xmlName),output);
// xmlw.write(doc);
// xmlw.close();
writeXML(doc, xmlName); //调用创建XML文档的方法
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* sql:表示sql语句,要查询的表信息
* rootElementName:表示根元素的名称
* eleElement:表示根元素下的第一个子元素,
*/
public void createXML(String sql,String rootElementName,String eleElement){
String xmlName=rootElementName+".xml"; //要保存的文件名
ResultSet rs=Query(sql); //返回所查询的数据集
try {
if(rs!=null){
Document doc=DocumentHelper.createDocument();
Element eleroot=doc.addElement(rootElementName); //添加根元素
ResultSetMetaData rsmd=rs.getMetaData();
int colshu=rsmd.getColumnCount(); //取得列数
while(rs.next()){ //以下是为子元素添加元素和内容
Element element=eleroot.addElement(eleElement); //为根元素添加子元素(有多少条记录则有多少子元素)
for(int i=1;i<=colshu;i++){
//String colName=rsmd.getColumnName(i); //取得当前列名
//从子元素中添加元素(列名)和元素的文本(列值) 以下是为子元素添加元素
Element ele=element.addElement(rsmd.getColumnName(i)).addText(rs.getString(i));
}
}
writeXML(doc, xmlName); //调用创建XML文档的方法
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* sql:表示sql语句,要查询的表信息
* rootElementName:表示根元素的名称
* eleElement:表示根元素下的第一个子元素,
*/
public void createXML(String sql,String rootElementName){
String eleElement=rootElementName+"Iterm"; //根元素下的子元素
String xmlName=rootElementName+".xml"; //要保存的文件名
ResultSet rs=Query(sql); //返回所查询的数据集
try {
if(rs!=null){
Document doc=DocumentHelper.createDocument();
Element eleroot=doc.addElement(rootElementName); //添加根元素
ResultSetMetaData rsmd=rs.getMetaData();
int colshu=rsmd.getColumnCount(); //取得列数
while(rs.next()){ //以下是为子元素添加元素和内容
Element element=eleroot.addElement(eleElement); //为根元素添加子元素(有多少条记录则有多少子元素)
for(int i=1;i<=colshu;i++){
//String colName=rsmd.getColumnName(i); //取得当前列名
//从子元素中添加元素(列名)和元素的文本(列值) 以下是为子元素添加元素
Element ele=element.addElement(rsmd.getColumnName(i)).addText(rs.getString(i));
}
}
writeXML(doc, xmlName); //调用创建XML文档的方法
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* sql:表示sql语句,要查询的表信息
*/
public void createXML(String sql){
String rootElementName="root"; //根元素
String eleElement=rootElementName+"Iterm"; //根元素下的子元素
String xmlName=rootElementName+".xml"; //保存的xml文档名
ResultSet rs=Query(sql); //返回所查询的数据集
try {
if(rs!=null){
Document doc=DocumentHelper.createDocument();
Element eleroot=doc.addElement(rootElementName); //添加根元素
ResultSetMetaData rsmd=rs.getMetaData();
int colshu=rsmd.getColumnCount(); //取得列数
while(rs.next()){ //以下是为子元素添加元素和内容
Element element=eleroot.addElement(eleElement); //为根元素添加子元素(有多少条记录则有多少子元素)
for(int i=1;i<=colshu;i++){
//String colName=rsmd.getColumnName(i); //取得当前列名
//从子元素中添加元素(列名)和元素的文本(列值) 以下是为子元素添加元素
Element ele=element.addElement(rsmd.getColumnName(i)).addText(rs.getString(i));
}
}
writeXML(doc, xmlName); //调用创建XML文档的方法
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void UpdateXML(int i){
try {
SAXReader reader=new SAXReader();
Document doc=reader.read("student.xml");
List<Element> list=doc.selectNodes("//students/student");
for (Element ele : list) {
//得到名称为age的元素,并取出文本值再加上要修改的数
int age=Integer.parseInt(ele.element("age").getText())+i;
String sage=String.valueOf(age);
ele.element("age").setText(sage); //设置元素age的文本值
}
System.out.println("更新成功...");
writeXML(doc, "student.xml"); //调用创建XML文档的方法
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
Students stu=new Students();
String sql="select * from student";
//stu.createXML(sql,"students","student","student.xml");
stu.UpdateXML(10);
}
}