xml拼装和解析

有关xml格式报文的拼装和解析,主要是利用jdom包。

<dependency>
	<groupId>org.jdom</groupId>
	<artifactId>jdom</artifactId>
	<version>1.1</version>
</dependency>
pom依赖取自: http://www.mvnrepository.com/


引用的类:

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


首先定义元素:

<span style="white-space:pre">	</span>private static Element service, 
			service_Header,
			<span style="white-space:pre">	</span>service_id,
			<span style="white-space:pre">	</span>requester_id,
		<span style="white-space:pre">		</span>branch_id,
			<span style="white-space:pre">	</span>channel_id,
			<span style="white-space:pre">	</span>version_id,
			<span style="white-space:pre">	</span>service_time,
			<span style="white-space:pre">	</span>service_sn,
			service_Body,
			<span style="white-space:pre">	</span>request,
				  func, 
				  cust_acct_no, 
				  cust_name, 
				  flg1, 
				  cert_typ, 
				  cert_id, 
				  chk_pwd, 
				  pswd, 
				  sec_mt_con, 
				  flg3;
	
然后建立元素和嵌套:

	private static void buildElement() throws Exception{
		//定义
		service = new Element("Service");
		
		service_Header = new Element("Service_Header");
		
		service_id = new Element("service_id");
		requester_id = new Element("requester_id");
		branch_id = new Element("branch_id");
		channel_id = new Element("channel_id");
		version_id = new Element("version_id");
		service_time = new Element("service_time");
		service_sn = new Element("service_sn");
		
		service_Body = new Element("Service_Body");
		
		request = new Element("request");
		func = new Element("FUNC");
		cust_acct_no = new Element("CUST-ACCT-NO");
		cust_name = new Element("CUST-NAME");
		flg1 = new Element("FLG1");
		cert_typ = new Element("CERT-typ");
		cert_id = new Element("CERT-ID");
		chk_pwd = new Element("CHK-PWD");
		pswd = new Element("PSWD");
		sec_mt_con = new Element("SEC-MT-CON");
		flg3 = new Element("FLG3");
		
		//组装
		service.addContent(service_Header);
		service.addContent(service_Body);
		
		service_Header.addContent(service_id);
		service_Header.addContent(requester_id);
		service_Header.addContent(branch_id);
		service_Header.addContent(channel_id);
		service_Header.addContent(version_id);
		service_Header.addContent(service_time);
		service_Header.addContent(service_sn);
		
		service_Body.addContent(request);
		request.addContent(func);
		request.addContent(cust_acct_no);
		request.addContent(cust_name);
		request.addContent(flg1);
		request.addContent(cert_typ);
		request.addContent(cert_id);
		request.addContent(chk_pwd);
		request.addContent(pswd);
		request.addContent(sec_mt_con);
		request.addContent(flg3);
	}
接着是赋值方法:

<span style="white-space:pre">	</span>public static void setElement(BankInfo bankinfo) throws Exception{
		//header
		service_id.addContent(bankinfo.getService_idStr());
		requester_id.addContent(bankinfo.getRequester_idStr());
		branch_id.addContent(bankinfo.getBranch_idStr());
		channel_id.addContent(bankinfo.getChannel_idStr());
		version_id.addContent(bankinfo.getVersion_idStr());
		service_time.addContent(bankinfo.getService_timeStr());
		service_sn.addContent(bankinfo.getService_snStr());
		
		//body request
		func.addContent(bankinfo.getFuncStr());
		cust_acct_no.addContent(bankinfo.getCust_acct_noStr());
		cust_name.addContent(bankinfo.getCust_nameStr());
		flg1.addContent(bankinfo.getFlg1Str());
		cert_typ.addContent(bankinfo.getCert_typStr());
		cert_id.addContent(bankinfo.getCert_idStr());
		chk_pwd.addContent(bankinfo.getChk_pwdStr());
		pswd.addContent(bankinfo.getPswdStr());
		sec_mt_con.addContent(bankinfo.getSec_mt_conStr());
		flg3.addContent(bankinfo.getFlg3Str());
	}
最后是调用方法呐:

<span style="white-space:pre">	</span>public synchronized static String getXMLStr(BankInfo bankinfo) {
		String outString = "";
		String resultStr = "";
		
		try{
			buildElement();
			setElement(bankinfo);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		Document myDocument = new Document();
		myDocument.addContent(service);
		
		try{
			Format format = Format.getPrettyFormat();
			format.setEncoding("GB2321");
			format.setExpandEmptyElements(true);
			XMLOutputter xmlOut = new XMLOutputter(format);
			outString = xmlOut.outputString(myDocument);
			resultStr = outString.substring(outString.indexOf("\n")+1);//用于截去第一段引用
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		return resultStr;
	}

这样就完成了,试一试:

	public static void main(String[] args) {
		/* getXmlStr() 测试 */
		BankInfo bankInfo = new BankInfo();
		String xmlString = "";
		xmlString = Jxml.getXMLStr(bankInfo);
		System.out.println(xmlString);
	}

结果:

<?xml version="1.0" encoding="GB2321"?>
<Service>
  <Service_Header>
    <service_id>00260001004006</service_id>
    <requester_id>0018</requester_id>
    <branch_id>802777777</branch_id>
    <channel_id>01</channel_id>
    <version_id>01</version_id>
    <service_time></service_time>
    <service_sn></service_sn>
  </Service_Header>
  <Service_Body>
    <request>
      <FUNC></FUNC>
      <CUST-ACCT-NO></CUST-ACCT-NO>
      <CUST-NAME></CUST-NAME>
      <FLG1></FLG1>
      <CERT-typ></CERT-typ>
      <CERT-ID></CERT-ID>
      <CHK-PWD></CHK-PWD>
      <PSWD></PSWD>
      <SEC-MT-CON></SEC-MT-CON>
      <FLG3></FLG3>
    </request>
  </Service_Body>
</Service>
这样就急用jdom拼装出xml格式报文。

解析:

byte[] rb = ...
logger.info("接收的报文:" + new String(rb,"GB2312"));

SAXBuilder builder = new SAXBuilder(); 
Document myDocument;
StringReader sr = new StringReader(new String(rb,"GB2312"));
InputSource is = new InputSource(sr);

myDocument =builder.build(is);
Element ini = myDocument.getRootElement();

ini.getChild("head").getChildText("ans_no");
rb为接收到的报文,这样就获取<head>下的<ans_no>的内容。

这为工作上用到的,没有深入的再去了解,欢迎指教。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值