`
yuelong
  • 浏览: 33832 次
  • 性别: 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呢

相关推荐

    javabean 与 xml文件转换

    JavaBean和XML之间的转换是Java开发中常见的数据交换方式,特别是在处理配置文件或者进行数据持久化时。这两种格式都有其独特的优势:JavaBean是面向对象的,方便编程,而XML则是一种通用的数据交换格式,易于人阅读...

    javaBean 与 xml 互转

    通过定义符合JavaBean规范的类,并利用JAXB的序列化和反序列化功能,我们可以方便地在Java对象和XML文档之间进行数据转换。这在处理Web服务、配置文件或跨平台数据交换时非常有用。在实际开发中,确保对这些基本概念...

    java对象与xml间的转换.docx

    Java 对象与 XML 之间的转换 Java 对象与 XML 之间的转换是 Java programming 中的一个重要话题。随着软件开发的复杂化,数据交换变得越来越频繁,而 XML 作为一种通用的数据交换格式,渐渐成为开发者们的选择之一...

    Jaxb2 实现JavaBean与xml互转

    当需要在Java程序中处理XML数据时,JAXB(Java Architecture for XML Binding)提供了一种方便、高效的方法,将Java对象和XML文档之间进行映射,实现了JavaBean与XML之间的自动转换。本篇将深入探讨JAXB2在实现...

    java 根据javaBean反射自定义导出 excel、xml、pdf、csv

    首先,为JavaBean创建一个对应的XML Schema(XSD),然后使用JAXB将JavaBean对象转换成XML文档。 3. **PDF**:生成PDF文件可以使用iText库。创建一个`Document`对象,然后添加`Paragraph`、`Table`等元素,将...

    java持久化工具类:JavaBean与XML

    JavaBean是一种符合特定规范的Java类,常用于封装业务逻辑和数据,而XML则是一种通用的数据交换格式,常用于配置文件和数据传输。 ### JavaBean JavaBean是一种遵循特定规则的Java类,它主要用于封装数据和提供可...

    xmlbean轻轻松松读写XML的利器

    **XMLBean**是一款类似于Hibernate这样的对象关系映射(Object Relational Mapping,ORM)工具的产品,它将复杂的XML读写操作简化为对JavaBean的操作,从而极大地简化了XML的读写过程,使得即使是不熟悉XML的开发者...

    读取文件数据并解析成bean实体类

    4. **对象映射(对象-XML/JSON映射)**:这是一种将数据结构(如Bean)与数据格式(如XML或JSON)之间进行转换的技术。比如,使用Jackson库的`ObjectMapper`可以方便地将JSON字符串解析成Bean,反之亦然。 5. **...

    XML_与_Java_技术_用_Castor_进行数据绑定.doc

    总之,Castor框架是Java开发者处理XML数据的一个强大工具,它通过数据绑定简化了XML与Java对象之间的转换,减少了编程复杂性,提高了效率。对于那些主要关心XML数据内容而非其结构的项目,采用Castor进行数据绑定是...

    JSP+XML构架网站的实例

    总的来说,JSP+XML架构网站的实例展示了如何利用XML进行数据标准化,动态生成XML文档,并通过XSL进行数据转换,以实现灵活且高效的网页呈现。这种技术组合在处理复杂数据和构建可扩展的Web应用程序时具有显著优势。

    jsp+javabean+servlet 权限管理系统

    总的来说,"jsp+javabean+servlet 权限管理系统"是一个基于Java Web技术的权限控制解决方案,它涵盖了用户认证、授权的基本流程,以及与数据库交互、视图展示和业务逻辑处理的关键环节。通过学习和理解这个系统,...

    JAVA\JSP and XML

    在Java Web应用程序中,JSP主要用于创建动态网页,而XML则是一种通用的数据交换格式,常用于存储和传输结构化数据。 **Java JSP技术** 1. **JSP概述**:JSP是Java平台上的服务器端脚本语言,它允许开发者在HTML...

    IOUtils jar

    其设计原则是使得操作更加简洁,避免资源泄露,并提供了一些实用的功能,如字符串与流之间的转换、文件的读写等。 1. **流的复制与粘贴**: IOUtils的`copy()`方法非常实用,它可以将一个输入流的数据复制到另一个...

    java传智播客

    UI层负责用户交互,DAO层用于数据库或文件的读写,JavaBean封装业务对象,工具类(Util)则包含静态方法,提供通用的功能,如日期转换、字符串处理等。 5. **异常处理**: Java中的异常分为两种类型:编译时异常...

    mybatis反转引擎generator

    配置文件允许用户定义生成的类的命名规则、字段名的转换策略、是否生成通用的CRUD方法等。 3. **Java实体类** MBG根据数据库中的表生成对应的Java实体类。每个实体类代表一个数据库表,包含表中的所有字段,且每个...

    ibatis基础教程

    此外,还需要定义映射文件,用于描述Java对象与数据库表之间的映射关系。 #### 七、DTD的作用与意义 DTD(Document Type Definition)是XML文档类型定义的一种标准,它用于描述XML文档的结构。在iBatis中,DTD文件...

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

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

    json-lib-jar包

    在这个场景中,它可能被JSON-lib用来辅助处理Java集合与JSON之间的转换。 3. xom-1.2.4.jar:XOM(XML Object Model)是一个用于处理XML的Java库,它提供了一个简洁且一致的API来操作XML文档。虽然JSON-lib主要处理...

    SpringIOC所需要的jar包

    4. **jaxen-1.1-beta-6.jar**:Jaxen是一个通用的XPath库,可以在各种XML API(如DOM、JDOM、XOM等)之间提供统一的XPath实现。Spring框架在进行基于XPath的XML配置文件解析时,可能会利用到Jaxen。 5. **commons-...

Global site tag (gtag.js) - Google Analytics