package com.cmge.utils;

 import java.util.Iterator;

 import com.cmge.org.oa.bean.OADepartment;
import com.coast.foundation.utils.StringUtil;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;
import com.thoughtworks.xstream.io.xml.XppDriver; import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Iterator; /**
* XML与JavaBean相互转换工具类
* File: XMLBeanUtils.java
19
*/

public class XmlXStreamUtil {
private String version = "";
private String xml = "";
private LinkedList<String> addXml = new LinkedList<String>();
public static XmlXStreamUtil Build(){
return new XmlXStreamUtil();
} public XmlXStreamUtil xmlVersion(){
version = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
return this;
} public XmlXStreamUtil xmlVersion(String version,String encoding){
version = "<?xml version=\""+version+"\" encoding=\""+encoding+"\"?>";
return this;
} public XmlXStreamUtil XmlAdd(String v){
addXml.push(v);
return this;
} public String toString(){
StringBuffer sb = new StringBuffer(); if(!StringUtil.isNull(version))
sb.append(version);
for(int i = 0; i < addXml.size(); i++){
String v = addXml.get(i).toString();
sb.append("<"+v+">").append("\n");
}
//
sb.append(xml);
//
for(int i = addXml.size()-1; i >= 0; i--){
String v = addXml.get(i).toString();
sb.append("\n</"+v+">");
}
return sb.toString();
} public XmlXStreamUtil bean2xml(Class cls,String alias,Object bean){
bean2xml(cls,alias,null,bean);
return this;
} public XmlXStreamUtil bean2xml(Class cls,String alias,String attribute,Object bean){
XStream xstream = new XStream(
new XppDriver(new XmlFriendlyReplacer("_-", "_")));
xstream.alias(alias, cls);
if(!StringUtil.isNull(attribute)){
xstream.useAttributeFor( cls,attribute);
xstream.autodetectAnnotations(true);
}
xml = xstream.toXML(bean);
return this;
} /**
* 将Bean转换为XML
*
* @param clazzMap 别名-类名映射Map
* @param bean 要转换为xml的bean对象
* @return XML字符串
*/
public XmlXStreamUtil bean2xml(Map<String, Class> clazzMap, Object bean) {
XStream xstream = new XStream(
new XppDriver(new XmlFriendlyReplacer("_-", "_"))); for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Class> m = (Map.Entry<String, Class>) it.next();
System.out.println("key="+m.getKey()+",v="+m.getValue());
xstream.alias(m.getKey(), m.getValue());
}
xml = xstream.toXML(bean);
System.out.println("xml=\n");
return this;
} /**
* 将XML转换为Bean
*
* @param clazzMap 别名-类名映射Map
* @param xml 要转换为bean对象的xml字符串
* @return Java Bean对象
*/
public Object xml2Bean(Map<String, Class> clazzMap, String xml) {
XStream xstream = new XStream(
new XppDriver(new XmlFriendlyReplacer("_-", "_")));
for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Class> m = (Map.Entry<String, Class>) it.next();
xstream.alias(m.getKey(), m.getValue());
}
Object bean = xstream.fromXML(xml);
return bean;
} /**
* 获取XStream对象
*
* @param clazzMap 别名-类名映射Map
* @return XStream对象
*/
public XStream getXStreamObject(Map<String, Class> clazzMap) {
XStream xstream = new XStream(
new XppDriver(new XmlFriendlyReplacer("_-", "_")));
for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) {
Map.Entry<String, Class> m = (Map.Entry<String, Class>) it.next();
xstream.alias(m.getKey(), m.getValue());
}
return xstream;
} public static void main(String [] args){ OADepartment od = new OADepartment(); od.setFullname("12312");
od.setCode("123");
od.setOrg_code("dd");
od.setCanceled("");
//XmlUtil.beanToXmlStr(OADepartment.class, "1", "2");
Map<String,Class> map = new HashMap();
map.put("org", OADepartment.class);
String xml = XmlXStreamUtil.Build() // .bean2xml(map, od)
.XmlAdd("root")
.XmlAdd("orglist")
.XmlAdd("ff")
.xmlVersion()
.bean2xml(OADepartment.class, "org","code", od)
.toString(); System.out.println(xml); System.out.println("\n\n\n\n");
String xml2 = XmlXStreamUtil.Build() .bean2xml(OADepartment.class, "org", od)
.toString();
System.out.println(xml2);
}
}

JavaBean转换为XML的源码的更多相关文章

  1. C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

    文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们 ...

  2. python实战===图片转换为字符的源码(转)

    #cmd执行命令为>>> python xx.py pic.png#-*- coding:utf-8 -*- from PIL import Image import argpars ...

  3. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  4. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...

  5. C#演示如何使用 XML 将源码编入文档

    工作闲暇时间,将做工程过程中常用的代码段记录起来,下面的代码是关于C#演示如何使用 XML 将编入文档的代码,希望对大伙有较大帮助. using System; public class SomeCl ...

  6. 6.2 dubbo在spring中自定义xml标签源码解析

    在6.1 如何在spring中自定义xml标签中我们看到了在spring中自定义xml标签的方式.dubbo也是这样来实现的. 一 META_INF/dubbo.xsd 比较长,只列出<dubb ...

  7. ehcache加载配置文件ehcache.xml的源码

    package net.sf.ehcache.config; public final class ConfigurationFactory { public static Configuration ...

  8. 使用dom4j写xml文件——源码

    1 dom4j下载与配置 1.1 dom4j下载 请移步下载链接 1.2 maven依赖 <dependency> <groupId>org.dom4j</groupId ...

  9. javabean 和 xml 互转

    1.场景描述 将javabean对象转换为xml字符串,将xml字符串转换为javabean对象. 2.maven依赖 <dependency> <groupId>jdom&l ...

随机推荐

  1. Multiple actions were found that match the request Web API

    在WebAPI工程入口不对外公开的接口不能使用public. [HttpPost] public string PostRequest([FromBody] Model model) { /// } ...

  2. thinkphp 模板里a标签 href 带参数的 使用U函数方法

    简单的说就是模板里 分类的链接地址 实现这个样子的 <a href="/index.php/Home/Category/assortment/cateid/2.html"&g ...

  3. 在Razor中如何引入命名空间?("import namespace in razor view") 【转】

    原文链接 找了半天,原来如此: 在aspx中: <%@ Import Namespace = "Martian.Areas.SFC.Models" %><%@ I ...

  4. Linq_Lambda GroupBy使用笔记

    今天看MVC遇到了GroupBY的Lambda表达式..有兴趣详细的看下去..得此笔记..记录之... 不罗嗦..上代码... //得到List<GroupEmail>对象 数据源 var ...

  5. VisualStudio基本使用(1)-显示行号

    "工具"-"选项"-"文本编辑器"-"C/C++"-"常规",勾选"行号"复选框 ...

  6. vim 配置,我本机的配置[windows]

    set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set ...

  7. sql sever 字符串函数

    SQL Server之字符串函数   以下所有例子均Studnet表为例:  计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student ...

  8. jquery 隐藏表单元素

    1.html <label for="lbl" >电压等级:</label> <input class="easyui-combobox&q ...

  9. POJ 2155 Matrix

    二维树状数组....                          Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

  10. 什么是H标签?H1,H2,H3标签?以及和strong标签使用的方法及重要性

    大家都知道,seo的一个很重要的一点就是要把网站做的条理清晰,让搜索引擎很容易的读明白,这个条理清晰不仅体现在网站的物理路径,url等地 方.在<h1><h2><h3&g ...