`
yuelong
  • 浏览: 33092 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

xml文件流与javabean之间的通用转换(下)

    博客分类:
  • Java
阅读更多

这个比较简单,接上一篇 。 传入javabean,生成xml文档字符串

根据上一篇文章中两位兄弟提示,有空的时候我在看看jax,用这种方式来实现。

 

 

代码如下:

1、主程序

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.dom4j.*;

public class Bean4xml {

	public static String parseBean4Xml(Object model) {
		
		//创建一个document对象
		Document xmlDoc = DocumentHelper.createDocument();
		String rootName = model.getClass().getSimpleName();
		//设置根节点(这里使用类名作为根节点)
		Element root = xmlDoc.addElement(rootName);
		//得到所有声明的方法
		Method[] methods = model.getClass().getDeclaredMethods();
		//得到所有属性
		Field[] fields = model.getClass().getDeclaredFields();
		for (Method method : methods) {
			//过滤出所有get方法
			if (method.getName().indexOf("get") > -1) {
				for (Field field : fields) {
					//匹配字段,并调用get方法,为element设置text值
					if (method.getName().indexOf(
							field.getName().substring(0, 1).toUpperCase()
									.concat(field.getName().substring(1))) > -1) {
						try {
							root.addElement(field.getName()).setText(
									(String) method.invoke(model,
											new Object[] {}));
						} catch (Exception e) {
							e.printStackTrace();
						}
					}
				}
			}
		}
		System.out.println(xmlDoc.asXML());
		return xmlDoc.asXML();
	}

	public static ChargeXmlModel createBean() {
		ChargeXmlModel model = new ChargeXmlModel();
		model.setCsn("20110926");
		model.setMethodName("getMpay");
		model.setMoney("1000.00");
		model.setPassword("123456");
		model.setTerminalid("88884444");
		model.setType("1");
		return model;
	}

	public static void main(String[] args) {
		parseBean4Xml(createBean());
	}
}

 

2、javaBean

 

public class ChargeXmlModel {
	private String methodName;
	private String type;
	private String terminalid;
	private String money;
	private String csn;
	private String password;

	public String getMethodName() {
		return methodName;
	}

	public void setMethodName(String methodName) {
		this.methodName = methodName;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getTerminalid() {
		return terminalid;
	}

	public void setTerminalid(String terminalid) {
		this.terminalid = terminalid;
	}

	public String getMoney() {
		return money;
	}

	public void setMoney(String money) {
		this.money = money;
	}

	public String getCsn() {
		return csn;
	}

	public void setCsn(String csn) {
		this.csn = csn;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

 

 

 

 

5
1
分享到:
评论
5 楼 ppm10103 2011-09-28  
JAXB 不超过10行就可以实现楼主的功能了
4 楼 yuelong 2011-09-27  
@ java夜未眠

    好!
3 楼 yuelong 2011-09-27  
zzx0421 写道
为什么不适用oxm呢

以前不知道有个oxm ,呵呵。 东西写了一半,所以还是写完了。 回头会看看oxm 实现,代码很简洁  。上次有人给我说过的。
2 楼 爪哇夜未眠 2011-09-27  
在楼主的基础上扩展了功能

package observer;

public class ChargeXmlModel {
	private String methodName;
	private String type;
	private String terminalid;
	private String money;
	private String csn;
	private String password;
	private Student student;

	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	public String getMethodName() {
		return methodName;
	}

	public void setMethodName(String methodName) {
		this.methodName = methodName;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getTerminalid() {
		return terminalid;
	}

	public void setTerminalid(String terminalid) {
		this.terminalid = terminalid;
	}

	public String getMoney() {
		return money;
	}

	public void setMoney(String money) {
		this.money = money;
	}

	public String getCsn() {
		return csn;
	}

	public void setCsn(String csn) {
		this.csn = csn;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}






package observer;

public class Student {
	private String name;
	private int age;
	private String address;
	private Book book;

	public Book getBook() {
		return book;
	}

	public void setBook(Book book) {
		this.book = book;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}



package observer;

public class Book {
	private String name;
	private int price;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

}


package observer;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class Bean4xml {

	public static Element parseBean4Xml(Object model) {

		// 创建一个document对象
		Document xmlDoc = DocumentHelper.createDocument();
		String rootName = model.getClass().getSimpleName();
		// 设置根节点(这里使用类名作为根节点)
		Element root = xmlDoc.addElement(rootName);
		// 得到所有声明的方法
		Method[] methods = model.getClass().getDeclaredMethods();
		// 得到所有属性
		Field[] fields = model.getClass().getDeclaredFields();
		for (Method method : methods) {
			// 过滤出所有get方法
			if (method.getName().indexOf("get") > -1) {
				for (Field field : fields) {
					// 匹配字段,并调用get方法,为element设置text值
					if (method.getName().substring(3).equals(
							field.getName().substring(0, 1).toUpperCase()
									.concat(field.getName().substring(1)))) {

						try {
							if (method.invoke(model, new Object[] {})
									.toString().indexOf("@") == -1) {
								root.addElement(field.getName()).setText(
										method.invoke(model, new Object[] {})
												.toString());
							} else {
								// parseBean4Xml(method.invoke(model,
								// new Object[] {}));
								root.add(parseBean4Xml(method.invoke(model,
										new Object[] {})));
							}
						} catch (Exception e) {
							e.printStackTrace();
						}
						continue;
					}
				}
			}
		}
		return root;
	}

	public static ChargeXmlModel createBean() {
		ChargeXmlModel model = new ChargeXmlModel();
		model.setCsn("20110926");
		model.setMethodName("getMpay");
		model.setMoney("1000.00");
		model.setPassword("123456");
		model.setTerminalid("88884444");
		model.setType("1");
		Student student = new Student();
		student.setName("dingjiang");
		student.setAge(24);
		student.setAddress("杭州");
		model.setStudent(student);
		Book book = new Book();
		book.setName("java");
		book.setPrice(100);
		student.setBook(book);
		return model;
	}

	public static void main(String[] args) {
		System.out.println(parseBean4Xml(createBean()).asXML());

	}
}

1 楼 zzx0421 2011-09-27  
为什么不适用oxm呢

相关推荐

    excel表格数据转换成javaBean

    通过XML配置文件,把大量的Excel表格数据转换成javaBean对象,具有通用行。使用方法简单,而且可以根据自己需要添加不通配置。

    基于Java的两个通用安全模块的设计与实现.zip

    JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

    Java2核心技术.part5

    12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带...

    Java2核心技术.part3

    12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带...

    Java2核心技术.part1

    12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的...

    Java2核心技术.part6

    12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带...

    Java2核心技术.part4

    12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带...

    Java2核心技术.part2

    12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带...

    jsp servlet 入门学习资料-新手一看就懂

    5.5 如何将一个普通的JSP文件转换为一个XML 文档 5.6 JSP1.1的DTD文件 第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page...

    jsp从入门到高级编程

    5.5 如何将一个普通的JSP文件转换为一个XML 文档 5.6 JSP1.1的DTD文件 第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page...

    JSP高级教程

    5.5 如何将一个普通的JSP文件转换为一个XML 文档 5.6 JSP1.1的DTD文件 第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 6.4 page...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA WEB典型模块与项目实战大全

    20.5 多学两招——其他操作xml文件组件  20.6 小结  第21章 用户维护功能(struts 2.x+ibatis)  21.1 用户维护功能  21.2 关于用户维护基础知识——ibatis框架  21.3 用户维护系统具体实现  21.4 小结...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Android插件

    重启完成之后 进入设置界面 选择other Setting 下的Sexy Editor , 右侧 insert 一张或多张图片即可,上面的其他设置可以设置方位 间隔时间 透明度等等,设置完成后,要关闭打开的文件,重新打开项目文件即可在代码...

    java 面试题 总结

    重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,...

    JSP高级编程

    5.5 如何将一个普通的JSP文件转换为一个XML 文档 5.6 JSP1.1的DTD文件 第6章 JSP基础实例 6.1 第一个JSP程序—HelloWorld! 6.2 注释的使用 6.3 脚本元素 6.3.1 声明 6.3.2 表达式 6.3.3 脚本代码 ...

    Struts2 in action中文版

    5.4.2 在String和Circle之间转换 102 5.4.3 配置框架使用自定义转换器 103 5.5 小结 106 第三部分 构建视图——标签和结果 第6章 构建视图——标签 108 6.1 入门 108 6.1.1 ActionContext和OGNL 109 6.1.2 虚拟对象...

    Spring.3.x企业应用开发实战(完整版).part2

    1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring 1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello ...

Global site tag (gtag.js) - Google Analytics