浅谈Objective-C实体转化为XML报文字符串和解析XML为实体

前两个月,由于公司项目需要,业余时间,迅速掌握入门Objective-c基本语法,由于Objective-c使用面向对象编程和MVC模式,很快就心里有底了,呵呵。最近忙于开发游戏服务器,Objective-C又一个月没有学习和敲过代码了,很快也忘了基本语法差不多,趁今天有空,再次回顾一下代码。介绍一下,实体与XML报文字符串互相转化。

大家知道,Objective-C创建一个类之前,必须声明一个接口,然后再创建一个实现该接口类。

复制代码
 1 //
2 // EntityConvertXML.h
3 // NoteRecord
4 //
5 // Created by 李 航杰 on 11-11-21.
6 // Copyright 2011年 LeeHonGee. All rights reserved.
7 //
8
9 #import <Foundation/Foundation.h>
10 @class Person;
11
12 @interface EntityConvertXML : NSObject {
13
14 }
15
16 +(NSString *) entityConvertXMLString:(Person*) person;
17 +(Person*) getEitityFromXmlConvert:(NSString*) responseXML;
18 @end
复制代码



接着,实现该接口类,这里我使用了懒汉单例模式,代码如下:

复制代码
 1 //
2 // EntityConvertXML.m
3 // NoteRecord
4 //
5 // Created by 李 航杰 on 11-11-21.
6 // Copyright LeeHonGee. All rights reserved.
7 //
8

9 #import "EntityConvertXML.h"
10 #import "Person.h"
11 #import "XmlParser.h"
12 @implementation EntityConvertXML
13 static EntityConvertXML *sharedInstance=nil;
14 +(EntityConvertXML*) sharedInstance{
15 if (sharedInstance==nil) {
16 sharedInstance=[[[self alloc] init] autorelease];
17 }
18 return sharedInstance;
19 }
20 /**
21 * 使用单例模式
22 * +(id) allocWithZone:(NSZone*) zone是覆盖方法
23 */
24 +(id) allocWithZone:(NSZone *)zone{
25 @synchronized(self){
26 if (sharedInstance==nil) {
27 sharedInstance=[super allocWithZone:zone];
28 return sharedInstance;
29 }
30 return nil;
31 }
32 }
复制代码

下面是实体于XML字符串互相转化代码

复制代码
 1 /**
2 * Author 李航杰
3 * 用途:这个方法主要实现对实体Class进行封装成XML报文
4 * 对于局部变量,自动释放池清空对象时,进行的,不需要使用显式的释放语句
5 */
6 +(NSString *) entityConvertXMLString:(Person*) person{
7 NSMutableString *xmlBody=[[NSMutableString alloc] init];
8 [xmlBody appendFormat:@"%@",@"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"];
9 [xmlBody appendString:@"\n<Person>\n"];
10 [xmlBody appendFormat:@"<countryNum>%@</countryNum>\n",person.countryNum];
11 [xmlBody appendFormat:@"<phone>%@</phone>\n",person.phone];
12 [xmlBody appendFormat:@"<name>%@</name>\n",person.name];
13 [xmlBody appendFormat:@"<email>%@</email>\n",person.email];
14 [xmlBody appendFormat:@"<gender>%@</gender>\n",person.gender];
15 [xmlBody appendFormat:@"<password>%@</password>\n",person.password];
16 [xmlBody appendString:@"</Person>"];
17 return [xmlBody autorelease];
18 }
19 /**
20 *@Author 李航杰
21 *用途:使用XmlParser将XML报文字符串转化为实体对象
22 *
23 */
24
25 +(Person*) getEitityFromXmlConvert:(NSString*) responseXML{
26 XmlParser *parser = [[XmlParser alloc] init];
27 Person *person=[[Person alloc] init];
28 NSMutableArray *personArray = [parser fromXml:responseXML withObject:person];
29 person = [personArray objectAtIndex:0];
30 [parser release];
31 return [person autorelease];
32 }
33 /**
34 *记得急时释放资源,以免内存泄漏
35 *
36 */
37 -(void) dealloc{
38 [super dealloc];
39 }
40
41 @end
复制代码



本代码是之前入门时所创建,还没使用对实体转化进行代码复用,有时间再完善

 

创建者:2012-02-26   上午10:11:08


 

 

posted @   LeeHonGee  阅读(3364)  评论(2编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
点击右上角即可分享
微信分享提示