实体类Object拼接XML以及相互转换

本文详细介绍了一种简单粗暴的方法,使用实体类Object来拼接XML以及如何将XML转换回实体类。通过具体示例,包括请求报文实体类的创建与返回报文的解析,展示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单粗暴:实体类Object拼接XML以及相互转换

1、请求报文实体类拼接代码:

@XmlAccessorType(value=XmlAccessType.FIELD)  //访问类型改为字段
@XmlType(propOrder={"idcardno","personnalname","countycode","countyname","communitycode","communityname"})
public class RCardinfo  {
	//身份证号
	private String idcardno;
	//人员姓名
	private String personnalname;
	// 所在区编码
	private String countycode;
	//所在区名称
	private String countyname;
	//所在社区编码
	private String communitycode;
	//所在社区名称
	private String communityname;
	public String getIdcardno() {
		return idcardno;
	}
	public void setIdcardno(String idcardno) {
		this.idcardno = idcardno;
	}
	public String getPersonnalname() {
		return personnalname;
	}
	public void setPersonnalname(String personnalname) {
		this.personnalname = personnalname;
	}
	public String getCountycode() {
		return countycode;
	}
	public void setCountycode(String countycode) {
		this.countycode = countycode;
	}
	public String getCountyname() {
		return countyname;
	}
	public void setCountyname(String countyname) {
		this.countyname = countyname;
	}
	public String getCommunitycode() {
		return communitycode;
	}
	public void setCommunitycode(String communitycode) {
		this.communitycode = communitycode;
	}
	public String getCommunityname() {
		return communityname;
	}
	public void setCommunityname(String communityname) {
		this.communityname = communityname;
	}
	@Override
	public String toString() {
		return "Cardinfo [communitycode=" + communitycode + ", communityname="
				+ communityname + ", countycode=" + countycode
				+ ", countyname=" + countyname + ", idcardno=" + idcardno
				+ ", personnalname=" + personnalname + "]";
	}	
}

2、返回报文拼接成实体类:

@XmlAccessorType(value=XmlAccessType.FIELD)  //访问类型改为字段
@XmlRootElement(name = "result")  // XML文件中的根标识 
@XmlType(propOrder={"resultinfo","errorinfo","cardinfo","payfeeinfo","payfeelist","payfeetotal"})
public class Backs  {
	private Bresultinfo resultinfo;
	private Berrorinfo errorinfo;
	private RCardinfo cardinfo;
	private RPayfeeinfo payfeeinfo;
	private RPayfeelist payfeelist;
	private RPayfeetotal payfeetotal;
	public Bresultinfo getResultinfo() {
		return resultinfo;
	}
	public void setResultinfo(Bresultinfo resultinfo) {
		this.resultinfo = resultinfo;
	}
	public Berrorinfo getErrorinfo() {
		return errorinfo;
	}
	public void setErrorinfo(Berrorinfo errorinfo) {
		this.errorinfo = errorinfo;
	}
	public RCardinfo getCardinfo() {
		return cardinfo;
	}
	public void setCardinfo(RCardinfo cardinfo) {
		this.cardinfo = cardinfo;
	}
	public RPayfeeinfo getPayfeeinfo() {
		return payfeeinfo;
	}
	public void setPayfeeinfo(RPayfeeinfo payfeeinfo) {
		this.payfeeinfo = payfeeinfo;
	}
	public RPayfeelist getPayfeelist() {
		return payfeelist;
	}
	public void setPayfeelist(RPayfeelist payfeelist) {
		this.payfeelist = payfeelist;
	}
	public RPayfeetotal getPayfeetotal() {
		return payfeetotal;
	}
	public void setPayfeetotal(RPayfeetotal payfeetotal) {
		this.payfeetotal = payfeetotal;
	}
	@Override
	public String toString() {
		return "Backs [cardinfo=" + cardinfo + ", errorinfo=" + errorinfo
				+ ", payfeeinfo=" + payfeeinfo + ", payfeelist=" + payfeelist
				+ ", payfeetotal=" + payfeetotal + ", resultinfo=" + resultinfo
				+ "]";
	}
	

}

3、具体的请求拼装:

public class RequestxxxService {
	public static final String path = "192.168.000.000:0000";
	public static String selectPayFee(String idcardno,String bankcode,String insurancecode){
		String url = "http://"+path+"/xxx.do";
		String res = "";
		//拼接访问XML
		Requests re = new Requests();
		RCardinfo cardinfo = new RCardinfo();
		cardinfo.setIdcardno(idcardno);
		re.setCardinfo(cardinfo);
		RPayfeeinfo payfeeinfo = new RPayfeeinfo();
		payfeeinfo.setBankcode(bankcode);
		payfeeinfo.setInsurancecode(insurancecode);
		re.setPayfeeinfo(payfeeinfo);
		String xml = RXMLUtil.objToXml(re);
		xml = xml.replaceAll("encoding=\"UTF-8\" standalone=\"yes\"?", "encoding=\"UTF-8\"");
		System.out.println("原始串:"+xml);
		try {
			String rs = HttpRequest.sendPost("BK01", url, xmlbyte);
			/*String rs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><result><resultinfo><resultcode>0</resultcode><resultmessage>操作正确完成。</resultmessage>"+
			"</resultinfo><errorinfo><errorcode>-20001</errorcode><errormessage>查无此人。</errormessage></errorinfo>" +
			"<errorinfo><errorcode>-20002</errorcode><errormessage>查无此人2。</errormessage></errorinfo>"+
			"<cardinfo><idcardno>130101199901010001</idcardno><personnalname>测试人员</personnalname><countycode>01</countycode>+" +
			"<countyname>XXX区</countyname><communitycode>01</communitycode><communityname>XXX社区</communityname></cardinfo>"+
			"<payfeeinfo><paidregserialno>1000000000000000</paidregserialno><payamount>200</payamount>" +
			"<paypermemo>2008年度xxxxxxxx</paypermemo></payfeeinfo></result>";*/
			System.out.println("返回:"+rs);
			Backs back = (Backs) RXMLUtil.XmlStrToObject(Backs.class, rs);
			System.out.println(back.toString());
			
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return res;
	}
	public static void main(String[] args) {//
		selectPayFee("","90","24");

}

公共方法:

//Object转Xml
public static String objToXml(Object obj) {  
        // 创建输出流  
        StringWriter sw = new StringWriter();  
        try {  
            // 利用jdk中自带的转换类实现  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
  
            Marshaller marshaller = context.createMarshaller();  
            // 格式化xml输出的格式  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  
                    Boolean.TRUE);  
            // 将对象转换成输出流形式的xml  
            marshaller.marshal(obj, sw);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return sw.toString();  
}  
//Xml转Object
public static Object XmlStrToObject(Class clazz, String xmlStr) {  
        Object xmlObject = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(clazz);  
            // 进行将Xml转成对象的核心接口  
            Unmarshaller unmarshaller = context.createUnmarshaller();  
            StringReader sr = new StringReader(xmlStr);  
            xmlObject = unmarshaller.unmarshal(sr);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return xmlObject;  
}  

 

【原创】帖请注明来源,谢谢 -tag 1- 测试无内存泄露 1 创建数据对象() NSMutableDictionary *map = [[NSMutableDictionary alloc]init]; [map setObject:@"a" forKey:@"author"]; [map setObject:@"b" forKey:@"title"]; [map setObject:@"c" forKey:@"content"]; 或者 NSMutableArray *list = [[NSMutableArray alloc]init]; NSMutableDictionary *map1 = [[NSMutableDictionary alloc]init]; [map1 setObject:@"a1" forKey:@"author"]; [map1 setObject:@"b1" forKey:@"title"]; [map1 setObject:@"c1" forKey:@"content"]; [list addObject:map1]; NSMutableDictionary *map2 = [[NSMutableDictionary alloc]init]; [map2 setObject:@"a2" forKey:@"author"]; [map2 setObject:@"b2" forKey:@"title"]; [map2 setObject:@"c2" forKey:@"content"]; [list addObject:map2]; 2 调用封装,声明对象名称及XML模板,组装器会根据XML模板填充数据。 XmlPackage *xmlPackage = [[XmlPackage alloc]init]; NSData *data = [xmlPackage objctPackage:map objectName:@"book1" xmlTemplateName:@"template1"]; 或者 NSData *data = [xmlPackage listPackage:list objectName:@"book1" xmlTemplateName:@"template1"]; 3 返回DATA 4 利用解析类解析并展现到UIView 部分代码如下: @implementation XmlPackage @synthesize obj; @synthesize isList; @synthesize xmlString; @synthesize objectName; @synthesize lvUp; @synthesize root; @synthesize buildEnd; -(NSData *)objctPackage:(NSMutableDictionary *)object objectName:(NSString *)name xmlTemplateName:(NSString *)templateName { NSMutableArray *array = [[NSMutableArray alloc]init]; [array addObject:object]; NSData *data = [self listPackage:array objectName:name xmlTemplateName:templateName]; [array release]; return data; } -(NSData *)listPackage:(NSMutableArray *)objects objectName:(NSString *)name xmlTemplateName:(NSString *)templateName { isList = YES; self.objectName = name; NSString *path = [[NSBundle mainBundle] pathForResource:templateName ofType:@"xml"]; NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path]; NSData *xmlData = [file readDataToEndOfFile]; NSXMLParser *xmlRead = [[NSXMLParser alloc] initWithData:xmlData]; [xmlRead setDelegate:self]; [xmlRead parse]; [xmlRead release]; //get dataTemplate for (int i=0;i<[objects count]; i++) { NSMutableDictionary *map = [objects objectAtIndex:i]; XmlNode *node = [[[XmlNode alloc]init]autorelease]; node.nodeName = objectName; [node addChildByMap:map]; [lvUp addChildNode:node]; } //get root's xmlString NSMutableString *x = [self.root getXmlString]; //NSLog(@"%@",x); if ((int)[x length]>0) { return [x dataUsingEncoding:NSUTF8StringEncoding]; } return nil; } - (void)dealloc { [obj release]; [xmlString release]; [objectName release]; [lvUp release]; //[root release]; [super dealloc]; } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:objectName]) { buildEnd = YES; }else{ if (!buildEnd) { //create node XmlNode *node = [[XmlNode alloc]init]; node.nodeName = elementName; //dataTemplate building... if (lvUp!=nil) { [lvUp addChildNode:node]; }else{ root = node; } lvUp = node; } } } @end ===== #import "XmlNode.h" @implementation XmlNode @synthesize nodeName; @synthesize nodeValue; @synthesize isLast; @synthesize list; @synthesize xmlString; - (void)dealloc { [nodeName release]; [nodeValue release]; [list release]; [xmlString release]; [super dealloc]; } -(NSString *)getXmlString { xmlString = [[NSMutableString alloc]init]; [xmlString appendString:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"]; [self getNodeStr:self string:xmlString]; return xmlString; } -(void)getNodeStr:(XmlNode *)node string:(NSMutableString *)str { if (node.isLast) { NSString *res = [[NSString alloc]initWithFormat:@"<%@>%@</%@>", node.nodeName, node.nodeValue, node.nodeName]; [str appendString:res]; [res release]; }else{ NSMutableString *a = [[[NSMutableString alloc]init]autorelease]; NSMutableArray *nodelist = [node getChilds]; for (int i=0;i<[nodelist count];i++) { XmlNode *node = [nodelist objectAtIndex:i]; [node getNodeStr:node string:a]; } NSString *res = [[NSString alloc]initWithFormat:@"<%@>%@</%@>", node.nodeName, a, node.nodeName]; [str appendString:res]; [res release]; } } -(void)addChildNode:(XmlNode *)node; { if (list==nil) { list = [[NSMutableArray alloc]init]; } [list addObject:node]; isLast = NO; } -(NSMutableArray *)getChilds { return list; } -(void)addChildByMap:(NSMutableDictionary *)map { NSEnumerator *keys = [map keyEnumerator]; id key; while (key = [keys nextObject]) { XmlNode *node = [[[XmlNode alloc]init]autorelease]; node.isLast = YES; node.nodeName = key; node.nodeValue = [map objectForKey:key]; [self addChildNode:node]; } } @end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值