XML_反射

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;
 }
}

你可能感兴趣的:(xml,exception,object,String,Class,Path)