/**
*
*/
package com.city.util;
import java.beans.PropertyDescriptor;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.junit.Test;
import com.city.pojo.BaseBean;
import com.city.pojo.UserInfo;
/**
* @author chendz 2012-7-3 下午04:50:08
*
*/
public class BuildXml implements BuildFile {
public <T extends BaseBean> String builder(T obj) {
List<BaseBean> list = new ArrayList<BaseBean>();
list.add(obj);
return this.builder(list);
}
/* (non-Javadoc)
* @see com.itrus.remote.BuildFile#builder(java.util.List)
*/
public <T extends BaseBean> String builder(List<T> list) {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
for(Object obj : list)
{
Element ele = root.addElement("user");
//添加节点
try {
this.addElement(ele , obj);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return root.asXML();
}
private void addElement(Element ele , Object obj) throws Exception{
Class<?> clazz = obj.getClass();
Field[] fs = clazz.getDeclaredFields();
for(Field field : fs)//遍历字段
{
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),clazz);
Method getMethod = pd.getReadMethod();
Element element = ele.addElement(field.getName());
//如果pojo对象的属性不为空,则加入到节点的text中
if(getMethod.invoke(obj) != null)
{
element.addText(getMethod.invoke(obj).toString());
}
}
}
/**解析xml
* @author wangxinying 2012-10-22 下午10:37:38
*
*/
public Map parseXML(String xml) throws Exception{
Document doc = DocumentHelper.parseText(xml);
Element el = ((Document) doc).getRootElement();
Map map = new HashMap();
if(el != null) {
List<Element> jiedians = el.elements();
for(int j=0;j<jiedians.size();j++) {
Element url = jiedians.get(j);
System.out.println("Name : "+url.getName()+" Value : "+url.getTextTrim());
map.put(url.getName(),url.getTextTrim());
if("uainfo".equals(url.getName().trim())){
List<Element> accounts1 = url.elements();
for(int t=0;t<accounts1.size();t++) {
Element acc = accounts1.get(t);
System.out.println(acc.getName()+" and "+acc.getTextTrim());
map.put(acc.getName(),acc.getTextTrim());
}
}
if("svccont".equals(url.getName().trim())) {
List<Element> accounts = url.elements();
for(int i=0;i<accounts.size();i++) {
Element acc = accounts.get(i);
System.out.println(acc.getName()+" and "+acc.getTextTrim());
map.put(acc.getName(),acc.getTextTrim());
}
}
}
}
System.out.println(map);
return map;
}
public String createXML(UserInfo user){
Document document = DocumentHelper.createDocument();
Element usersElement = document.addElement("ecity");
// usersElement.addAttribute("operate", "aa"); //添加根节点的属性
Element ele1 = usersElement.addElement("msgName");
ele1.addText("userRegisterResp");
Element ele2 = usersElement.addElement("msgversion");
ele2.addText("1.0");
Element ele3 = usersElement.addElement("transactionID");
ele3.addText("admin");
Element ele4 = usersElement.addElement("result");
ele4.addElement("RspCode").addText("0");
ele4.addElement("RspDesc").addText("");
Element ele5 = usersElement.addElement("SvcCont");
ele5.addElement("userid").addText(user.getUserid());
ele5.addElement("password").addText(user.getPassword());
return document.asXML();
}
public String createXMLInfo(Map map){
Set entries = map.entrySet( );
Document document = DocumentHelper.createDocument();
if(entries != null) {
Iterator iterator = entries.iterator( );
while(iterator.hasNext( )) {
Map.Entry entry =(Entry) iterator.next( );
Object key = entry.getKey( ).toString();
Object value = entry.getValue().toString();
// Element usersElement = document.addElement("ecity");
Element ele1 = document.addElement((String) key);
ele1.addText((String) value);
}
}
return document.asXML();
}
public static void main(String[] args) throws Exception {
// String xml="<ecity><msgname>userregisterreq</msgname>"+
// "<msgversion>1.0</msgversion><transactionid>1</transactionid><uainfo><ua>nokian97</ua></uainfo>" +
// "<userid></userid><userid></userid><msgsender>mmclient</msgsender>" +
// "<svccont><regid>13912345678</regid><regtype>0</regtype></svccont></ecity>";
// Map u=new BuildXml().parseXML(xml);
Map map=new HashMap();
map.put("token", "token");
String Mapu=new BuildXml().createXMLInfo(map);
System.out.println(Mapu);
}
}