通过类反射生成xml文件

解析xml地址:http://blog.csdn.net/without0815/article/details/45461395

入口测试类:

注:class 有很多方法需看java的api

package priv.yingmm.main;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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 priv.yingmm.entity.Area;

/**
 * @Description: xml生成测试类
 * @ClassName: ReflexTest
 * @author yingmm
 * @date 2015-5-2 下午08:53:21
 *
 */
public class ReflexTest {

	public static void main(String[] args) throws Exception {
		/**S 测试数据*/
		List<Area> areaList = new ArrayList<Area>();
		for (int i = 0; i < 10; i++) {
			areaList.add(new Area("33022" + i, "宁波市", 3000));
		}
		/**E 测试数据*/
		/**S 生成xml和写入数据*/
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		String parseStr = ReflexTest.parseStr(areaList);
		Document document = db.parse(new ByteArrayInputStream(parseStr.getBytes()));
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer t = tf.newTransformer();
		t.setOutputProperty("encoding", "utf-8");
		DOMSource doms = new DOMSource(document.getDocumentElement());
		StreamResult sr = new StreamResult(new FileOutputStream("area.xml"));
		t.transform(doms, sr);
		/**E 生成xml和写入数据*/

	}

	/**
	 * @param 集合拼接转换成字符串
	 * @author yingmm
	 * @throws Exception
	 */
	private static String parseStr(List list) throws Exception {
		// TODO Auto-generated method stub

		StringBuffer sb = new StringBuffer();
		sb.append("<areas>");
		for (int i = 0; i < list.size(); i++) {

			@SuppressWarnings("rawtypes")
			Class cl = list.get(i).getClass();
			Field[] f = cl.getDeclaredFields();
			sb.append("<area");
			sb.append(" id=\""+ cl.getMethod("getAreaCode", new Class[] {})
					.invoke(list.get(i), new Class[] {}) + "\">");
			for (int j = 0; j < f.length; j++) {
				if ("areaCode".equals(f[j].getName())) {
					continue;
				}
				f[j].setAccessible(true);
				sb.append("<" + f[j].getName() + ">");
				sb.append(f[j].get(list.get(i)));
				sb.append("</" + f[j].getName() + ">");
				f[j].setAccessible(false);
			}
			sb.append("</area>");
		}
		sb.append("</areas>");
		return sb.toString();
	}

}

Area.java 类

package priv.yingmm.entity;

/**
 * @Description: 区域类
 * @ClassName: Area
 * @author yingmm
 * @date 2015-5-2 下午08:05:53
 *
 */
public class Area {

	private String areaCode;
	private String areaName;
	private int personNum;

	// private String city;

	public Area() {
		super();
	}

	public Area(String areaCode, String areaName, int personNum) {
		super();
		this.areaCode = areaCode;
		this.areaName = areaName;
		this.personNum = personNum;
	}

	public String getAreaCode() {
		return areaCode;
	}

	public void setAreaCode(String areaCode) {
		this.areaCode = areaCode;
	}

	public String getAreaName() {
		return areaName;
	}

	public void setAreaName(String areaName) {
		this.areaName = areaName;
	}

	public int getPersonNum() {
		return personNum;
	}

	public void setPersonNum(int personNum) {
		this.personNum = personNum;
	}

}

时间: 2024-08-11 09:57:27

通过类反射生成xml文件的相关文章

5.29日 自己程序的编写,目的:生成xml文件

1.创建了XMLModel这个类:本来还有个rebuildformXML的方法,但是现在用不到,以后再说. public interface XmlModel { public void initModel(); public void doSaveXML(); } 2.对AbstractModel这个类进行了修改,最终变为: package hellogef.model; import java.beans.PropertyChangeListener; import java.beans.P

Java之Pull方式生成xml文件和解析xml文件

Pull XML解析器早已经被google集成到android sdk当中,它是google官方推荐的解析器. 如果我们要在Java桌面.J2ME等当中使用Pull方式生成xml文件和解析xml文件,需要用到kxml2: KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/ 普通XML PULL解析器的官网是http://xmlpull.org/ 实验开始: 在Eclipse中新建一个java项目,其中新建一个libs文件夹,拷贝从网上下载的k

【Java编程】SAX XML Parser解析、生成XML文件

1.优缺点 优点: SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题.其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求.由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用.支持 XPath 查询的 SAX 使得开发人员更加灵活,处理起 XML 来更加的得心应手. 缺点: 但是同时,其仍然有一些不足

使用Pull解析器生成XML文件和读取xml文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 一.布局界面 [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

跨平台支持的WebService接口Demo,利用xstream快速解析和生成xml文件

原文:跨平台支持的WebService接口Demo,利用xstream快速解析和生成xml文件 源代码下载地址:http://www.zuidaima.com/share/1591110000167936.htm 这个是我本人写的CXF的WebService的一个正在项目中使用的程序, 支持跨平台,经测试,java和C#客户端能正常使用,其中利用Xstream生成和解析xml,不需要修改对象;支持内部私有字段,直接根据生成java类生成xml,反过来根据xml生成java类. 运行说明: 部署到

android 中生成xml文件

在Android中生成xml文件真的很简单,下面提供2中方法,一种是通过String写入到文件,另外一种是通过XML 的 XmlSerializer. 以后遇到Android写xml内容就不会困惑了 1.通过string写入文件 String name=mEtName.getText().toString(); String age=mEtAge.getText().toString(); String Id=mEtID.getText().toString(); File file=new F

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

PHP中的生成XML文件的4种方法分享

生成如下XML串 Xml代码 <?xml version="1.0" encoding="utf-8"?> <article> <item> <title size="1">title1</title> <content>content1</content> <pubdate>2009-10-11</pubdate> </item&g

PHP生成XML文件

[前言] 使用PHP生成XML文件的4种常见方法如下: [XML文件内容] <?xml version="1.0" encoding="utf-8"?> <article> <item> <title size="1">title1</title> <content>content1</content> <pubdate>2009-10-11</