<ios>封装开源库GDataXML创建XML文件
2014-03-21 16:25
344 查看
编写目的:因最近做一个项目网络通信用到XML协议通信,而网上找的大部分资料都是XML解析。
一.开源库GDataXML下载和工程配置,请看/article/1389145.html博客, 非常感谢这位博主的分享。
特别说明:因为博主工程使用到ARC,而GDataXML是手动释放, 解决办法:
target里的build phases中,找到compile sources,把涉及到非ARC的类,后面加上: -fno-objc-arc
二.创建XML流程:
1.先创建根成员
2.根成员添加子成员[GDataXMLElement addChild];
3.如果子成员还有子节点,继续2步骤
4.创建文档[GDataXMLDocument initWithRootElement];
备注:该顺序限制了插入功能,后续在进行研究
三.代码部分
JXJParseXml.h文件
JXJParseXml.m文件
测试程序
一.开源库GDataXML下载和工程配置,请看/article/1389145.html博客, 非常感谢这位博主的分享。
特别说明:因为博主工程使用到ARC,而GDataXML是手动释放, 解决办法:
target里的build phases中,找到compile sources,把涉及到非ARC的类,后面加上: -fno-objc-arc
二.创建XML流程:
<?xml version="1.0" encoding="UTF-8" ?> <message type="UserLogin"> <username>Hello</username> <password>123456</password> <vrsion>33554698</version> </message>
1.先创建根成员
2.根成员添加子成员[GDataXMLElement addChild];
3.如果子成员还有子节点,继续2步骤
4.创建文档[GDataXMLDocument initWithRootElement];
备注:该顺序限制了插入功能,后续在进行研究
三.代码部分
JXJParseXml.h文件
#import <Foundation/Foundation.h> #define XMLMESSAGE (@"message") #define MSGTYPE (@"type") #define XMLRET (@"resultCode") #define XMLVERSION (@"1.0") #define XMLENCODING (@"UTF-8") /*xml 成员类*/ @interface JXJXmlElement : NSObject /*初始化成员XMLMESSAGE*/ - (id)initWithName:(NSString *)name; /*初始化成员XMLMESSAGE*/ - (id)initWithName:(NSString *)name stringValue:(NSString *)value; /*设置成员值*/ - (void)setStringValue:(NSString *)str; /* 设置成员属性*/ - (void)setAttribute:(NSString *)name stringValue:(NSString *)value; /*添加子成员*/ - (void)addChild:(JXJXmlElement *)ele; /*删除子成员*/ - (void)removeChild:(JXJXmlElement *)ele; @end /*xml文档类*/ @interface JXJXmlDocument : NSObject /*加载xml文档*/ - (id)initWithData:(NSData *)data; /* 初始化文档 ele:根成员 */ - (id)initWithEle:(JXJXmlElement *)ele; /*获取消息XMLMESSAGE值*/ - (NSString *)getMsgValue; /*@描述*/ - (NSString *)description; /*设置版本XMLVERSION*/ - (void)setVersion:(NSString *)version; /*设置编码类型XMLENCODING*/ - (void)setEncoding:(NSString *)encoding; @end /* 调用顺序(顺序不可乱) 1.jxjCreateRootEle创建根成员(JXJXmlElement) 2.jxjAppendChildEle添加子成员(JXJXmlElement) ..... 3.最后调用jxjCreateDocument创建xml(JXJXmlDocument) */ @interface JXJParseXml : NSObject /* type:消息message值 返回JXJXmlElement */ + (id)jxjCreateRootEle:(NSString *)type; /*返回JXJXmlElement*/ + (id)jxjAppendChildEle:(JXJXmlElement *)parentEle withName:(NSString *)name withValue:(NSString *)value; /*返回JXJXmlDocument*/ + (id)jxjCreateDocument:(JXJXmlElement *)xmlRootEle; @end
JXJParseXml.m文件
#import "JXJParseXml.h" #import "GDataXMLNode.h" /////// @interface JXJXmlElement () @property (retain, nonatomic) GDataXMLElement *xmlEle; @end @implementation JXJXmlElement - (id)initWithName:(NSString *)name { self = [super init]; if (self) { NSError *err; // self.xmlEle = [[GDataXMLElement alloc] initWithXMLString:name error:&err]; self.xmlEle = [GDataXMLNode elementWithName:name]; if (self.xmlEle == nil) { NSLog(@"GDataXMLElement alloc err[%ld]", (long)[err code]); } } return self; } - (id)initWithName:(NSString *)name stringValue:(NSString *)value { self = [super init]; if (self) { NSError *err; self.xmlEle = [GDataXMLNode elementWithName:name stringValue:value]; if (self.xmlEle == nil) { NSLog(@"GDataXMLElement alloc err[%ld]", (long)[err code]); } } return self; } - (void)setStringValue:(NSString *)str { [self.xmlEle setStringValue:str]; } - (void)setAttribute:(NSString *)name stringValue:(NSString *)value { GDataXMLNode *xmlNode = [GDataXMLNode attributeWithName:name stringValue:value]; [self.xmlEle addAttribute:xmlNode]; } - (void)addChild:(JXJXmlElement *)ele { [self.xmlEle addChild:ele.xmlEle]; } - (void)removeChild:(JXJXmlElement *)ele { [self.xmlEle removeChild:ele.xmlEle]; } @end /////// @interface JXJXmlDocument () @property (retain, nonatomic) GDataXMLDocument *xmlDoc; @end @implementation JXJXmlDocument - (id)initWithData:(NSData *)data { self = [super init]; if (self) { NSError *err; self.xmlDoc = [[GDataXMLDocument alloc] initWithData:data options:0 error:&err]; if (self.xmlDoc == nil) { NSLog(@"initWithData error[%ld]", (long)[err code]); } } return self; } - (id)initWithEle:(JXJXmlElement *)ele { self = [super init]; if (self) { self.xmlDoc = [[GDataXMLDocument alloc] initWithRootElement:ele.xmlEle]; } return self; } - (NSString *)getMsgValue { GDataXMLElement *rootEle = [self.xmlDoc rootElement]; if (rootEle) { NSArray *arrEles = [rootEle elementsForName:XMLMESSAGE]; if ([arrEles count] > 0) { GDataXMLElement *typeEle = [arrEles objectAtIndex:0]; NSString *name = [typeEle stringValue]; return name; } } return nil; } - (NSString *)description { NSData *data = [self.xmlDoc XMLData]; NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return str; } - (void)setVersion:(NSString *)version { [self.xmlDoc setVersion:version]; } - (void)setEncoding:(NSString *)encoding { [self.xmlDoc setCharacterEncoding:encoding]; } @end /////// @implementation JXJParseXml + (id)jxjCreateRootEle:(NSString *)type { JXJXmlElement *xmlEle = [[JXJXmlElement alloc] initWithName:XMLMESSAGE]; [xmlEle setAttribute:MSGTYPE stringValue:type]; return xmlEle; } + (id)jxjAppendChildEle:(JXJXmlElement *)parentEle withName:(NSString *)name withValue:(NSString *)value { JXJXmlElement *xmlEle = [[JXJXmlElement alloc] initWithName:name stringValue:value]; [parentEle addChild:xmlEle]; return xmlEle; } + (id)jxjCreateDocument:(JXJXmlElement *)xmlRootEle { JXJXmlDocument *xmlDoc = [[JXJXmlDocument alloc] initWithEle:xmlRootEle]; [xmlDoc setVersion:XMLVERSION]; [xmlDoc setEncoding:XMLENCODING]; return xmlDoc; } @end
测试程序
@property (weak, nonatomic) IBOutlet UITextView *textView; - (IBAction)xmlTapped:(id)sender { /*第一种*/ JXJXmlElement *xmlMsg = [JXJParseXml jxjCreateRootEle:@"UserLogin"]; [JXJParseXml jxjAppendChildEle:xmlMsg withName:@"username" withValue:@"Hello"]; [JXJParseXml jxjAppendChildEle:xmlMsg withName:@"password" withValue:@"123456"]; [JXJParseXml jxjAppendChildEle:xmlMsg withName:@"vrsion" withValue:@"33554698"]; JXJXmlDocument *xmlDoc = [JXJParseXml jxjCreateDocument:xmlMsg]; NSString *strXml = [NSString stringWithFormat:@"%@", xmlDoc]; self.textView.text = strXml; /*第二种*/ // JXJXmlElement *xmlMsg = [[JXJXmlElement alloc] initWithName:XMLMESSAGE]; // [xmlMsg setAttribute:MSGTYPE stringValue:@"UserLogin"]; // [JXJParseXml jxjAppendChildEle:xmlMsg withName:@"username" withValue:@"Hello"]; // [JXJParseXml jxjAppendChildEle:xmlMsg withName:@"password" withValue:@"123456"]; // [JXJParseXml jxjAppendChildEle:xmlMsg withName:@"vrsion" withValue:@"33554698"]; // JXJXmlDocument *xmlDoc = [[JXJXmlDocument alloc] initWithEle:xmlMsg]; // [xmlDoc setVersion:XMLVERSION]; // [xmlDoc setEncoding:XMLENCODING]; // NSString *strXml = [NSString stringWithFormat:@"%@", xmlDoc]; // self.textView.text = strXml; }
相关文章推荐
- iOS学习笔记21-当工程中提示#import <libxml/parser.h>不存在时,只需要两部操作即可
- iOS XMPP之常见错误一:(<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>)
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- &lt;转&gt;iOS开发拓展篇—封装音频…
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo <时间选择器&多行输入框&日期选择器>
- <iOS>NSXMLParser具体解析xml的应用详解
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo &lt;时间选择器&amp;多行输入框&amp;日期选择器&gt;
- [iOS] dom解析xml数据,拿到<>里面的值
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo <时间选择器&多行输入框&日期选择器>
- <iOS>NSXMLParser具体解析xml的应用详解
- IOS学习 ModalViewController模态视图的创建 两视图间用代理方式<传值>
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- [iOS] dom解析xml数据,拿到<>里面的值
- iOS_导入libxml2.2框架后,找不到<libxml/tree.h>的解决办法
- web.xml的配置中<context-param>配置作用
- Java中使用XML标签<x:transform />转化XML为HTML
- <iOS> xcode4.5.1、iphone5、ios6 兼容
- <iOS>属性写法