package com.fdq.accp.entity;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class init_xml {
public
init_xml
()
{}
public
void
init
(String path,List<Object> obj_list)
{
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
//有工厂生成一个转换器
DocumentBuilder builder = factory.newDocumentBuilder();
//创建一个空白文档
Document doc=builder.newDocument();
//创建一个节点
Element root=doc.createElement("root");
Element root_2=doc.createElement("root_2");
Element node=null;
for(int i=0;i<obj_list.size();i++)
{
Object obj=obj_list.get(i);
node=getElement(obj,doc);
root.appendChild(node);
}
doc.appendChild(root);
TransformerFactory tfactory=TransformerFactory.newInstance();
Transformer trans=tfactory.newTransformer();
Source s=new DOMSource(doc);//数据源 传入文档对象里
Result r=new StreamResult(path);//新生成一个 输入流
//新生成一个xml文件
trans.transform(s,r);
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public
static
Element
getElement(Object obj,Document doc)
{
Element node=doc.createElement("node");
// 获得对象
Class c=null;
try {
c = Class.forName(obj.getClass().getName());
// 获取对象里面 的所有字段
Field[] fields=c.getDeclaredFields();
//获取对象里的所有方法
Method[] method=c.getDeclaredMethods();
//获取对象名称
String class_name=c.getSimpleName().toLowerCase();
//往node节点里添加属性
node.setAttribute("class_name", class_name);
node.setAttribute("table_name","User_tab");
//循环获取所有方法和属性 添加到接点中去
for(int i=0;i<fields.length;i++)
{
//获取字段名,并生成新的节点
String field_name=fields[i].getName().toLowerCase();
//新生成的节点
Element el_field=doc.createElement(field_name);
//获取对象里的方法 添加到节点属性里
for(int j=0;j<method.length;j++)
{
//
String method_name=method[j].getName().toLowerCase();
if(method_name.indexOf(field_name)>-1)
{
String temp_str="";
if(method_name.startsWith("get"))
{
temp_str="method_get";
}else if(method_name.startsWith("set"))
{
temp_str="method_set";
}
el_field.setAttribute(temp_str, method_name);
}
//添加到接点属性
node.appendChild(el_field);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return node;
}
}