java 生成XML文档

这是公司网上业务项目中用的一个知识点,虽然是xml的知识,但没在实际项目这样用过:

过程描述:在类路径下,先建立一个 xml文档,applystate.xml,写一个继承ServletContextListener的类

在项目启动时,把xml加载进内存,这样做可以避免多次读写磁盘的操作。之后可以直接从内存中得到xml,添加与你业务相关的逻辑。

 

辅助类:

public class Constant {

//文件存放路径
	public static String applystate="/applystate.xml";
//声明一个byte数组,存放applystate.xml的二进制数据
	public static byte[] applystatebyte;

 

配置文件:config.properties

applystate=/applystate.xml

 监听接口:ServletContextListener,项目启动时执行ServletContextListener的contextInitialized,把xml文件装载进内存,下面是部分代码:

public class StartupListener extends ContextLoaderListener implements ServletContextListener{

    /**
     * 
     */
    public StartupListener() {
        super();
    }

    public void contextInitialized(ServletContextEvent event){
		
		    // Orion starts Servlets before Listeners, so check if the config
		    // object already exists
		    Properties properties = new Properties();
			properties.load(getClass().getResourceAsStream("/config.properties"));

Constant.applyxmlfile = new String(properties.getProperty("applyxmlfile"));

	String temp ;
	    	InputStream in = null;
	    	BufferedReader br = null;
			String xml = "";
	    	try{
				in = getClass().getResourceAsStream(Constant.applystate);
				br = new BufferedReader(new InputStreamReader(in));
				xml = "";
				while((temp=br.readLine())!=null){
					xml += temp.trim();
				}
				Constant.applystatebyte= xml.getBytes();
	    	}catch(Exception e){
	    		e.printStackTrace();
	    	}finally{
				if(br!=null){
					try {
						br.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if(in!=null){
					try {
						in.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}

 

ApplyXmlUtil类:从内存中加载xml文件,和添加新节点,最后写入,和返回xml格式的String

代码(和公司的一些业务逻辑有关了。。。。。):

package com.gzepro.gdcrj.util;

import java.io.ByteArrayInputStream;
import java.text.SimpleDateFormat;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

import cn.hnisi.eecmis.vo.ApplyProgress;
import cn.hnisi.eecmis.vo.VRyCjsq;
import cn.hnisi.eecmis.vo.VRyDcsq;

import com.gzepro.util.Constant;

public class ApplyXmlUtil {
	
	public static String convertApplyToXmlString(ApplyProgress apply) throws Exception{
		
		SAXBuilder dbuilder = new SAXBuilder();
		Document doc = dbuilder.build(new ByteArrayInputStream(
				Constant.applystatebyte));
		SimpleDateFormat sdf_time = new SimpleDateFormat(
				Constant.datetime_fomate);
		SimpleDateFormat sdf = new SimpleDateFormat(Constant.date_fomate);
		
		//获取根元素
		Element root = doc.getRootElement();
		//获取出境申请信息记录
		VRyCjsq[] cjsqs=apply.getCjsqs();
		//获取单程申请信息记录
		 VRyDcsq[] dcsqs=apply.getDcsqs();
		 Element elements =null;
		 if((cjsqs==null||cjsqs.length==0)&&(dcsqs==null||dcsqs.length==0)){
			 root.getChild("getdata").setText("0");
			 root.getChild("nodatamsg").setText("没有找到记录");
			 
			 
		 }else{
			 root.getChild("getdata").setText("1");
			 
			 if(cjsqs.length>0){
				 //遍历出境申请信息记录
				 for(int i=0;i<cjsqs.length;i++){
					 elements=new Element("data");
					 VRyCjsq cjsq=cjsqs[i];
					 //业务编号
					 if(cjsq.getYwbh()!=null&&cjsq.getYwbh().trim().length()>0){
						 elements.addContent(new Element("ywbh").setText(cjsq.getYwbh().trim()));
					 }
					
					 //申请时间
					 if(cjsq.getSlrq()!=null){
						 System.out.println(cjsq.getSlrq().getTime());
						 elements.addContent(new Element("sqsj").setText(sdf.format(cjsq.getSlrq().getTime())));
					 }
					 //材料类型
					 if(cjsq.getSqlb()!=null&&!cjsq.getSqlb().equals("")){
						 elements.addContent(new Element("cllb").setText(cjsq.getSqlb()));
					 }
					 //姓名
					 if(cjsq.getZwxm()!=null&&cjsq.getZwxm().trim().length()>0){
						 elements.addContent(new Element("xm").setText(cjsq.getZwxm().trim()));
					 }
					 //身份证号码
					 if(cjsq.getSfzh()!=null&&cjsq.getSfzh().trim().length()>0){
						 elements.addContent(new Element("sfzhm").setText(cjsq.getSfzh().trim()));
					 }
					 //处理环节
					 if(cjsq.getCurrenthj()!=null&&cjsq.getCurrenthj().trim().length()>0){
						 elements.addContent(new Element("clhj").setText(cjsq.getCurrenthj().trim()));
					 }
					 //审批结果
					 if(cjsq.getSpjg()!=null&&cjsq.getSpjg().trim().length()>0){
						 elements.addContent(new Element("spjg").setText(cjsq.getSpjg()));
					 }
					 
					 //分数
					 elements.addContent(new Element("fs").setText("0"));
					 root.addContent(elements);
				 }//end for
				 
			 }
			 
			 if(dcsqs!=null){
				
				 //遍历单程申请信息记录
				 for(int i=0;i<cjsqs.length;i++){
					 elements = new Element("data");
					 VRyDcsq dcsq=dcsqs[i];
					 //业务编号
					 if(dcsq.getYwbh()!=null&&dcsq.getYwbh().trim().length()>0){
						 elements.addContent(new Element("ywbh").setText(dcsq.getYwbh().trim()));
					 }
					 //申请时间
					 if(dcsq.getSlrq()!=null){
						 elements.addContent(new Element("sqsj").setText(sdf.format(dcsq.getSlrq().getTime())));
					 }
					 //材料类型
					 if(dcsq.getSqlb()!=null&&dcsq.getSqlb().trim().length()>0){
						 elements.addContent(new Element("cllx").setText(dcsq.getSqlb()));
					 }
					 //姓名
					 if(dcsq.getZwxm()!=null&&dcsq.getZwxm().trim().length()>0){
						 elements.addContent(new Element("xm").setText(dcsq.getZwxm().trim()));
					 }
					//身份证号码
					 if(dcsq.getSfzh()!=null&&dcsq.getSfzh().trim().length()>0){
						 elements.addContent(new Element("sfzhm").setText(dcsq.getSfzh().trim()));
					 }
					 //审批结果
					 if(dcsq.getSpjg()!=null&&dcsq.getSpjg().trim().length()>0){
						 elements.addContent(new Element("spjg").setText(dcsq.getSpjg().trim()));
					 }
					 //分数
					 if(dcsq.getFs()!=null&&dcsq.getFs().equals("")){
						 elements.addContent(new Element("fs").setText(dcsq.getFs().toString()));
					 }
					 root.addContent(elements);
			 }//end for
				 
		}
			 
		 }
		 
		 /**
			 * 输出
			 */
			XMLOutputter output = new XMLOutputter();
			output.setEncoding("GBK");
			output.setIndent(true);
			output.setNewlines(true);
			output.setIndentSize(4);
			output.setExpandEmptyElements(true);
			return output.outputString(doc);
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值