近况小结+Objective-c解析XML文件

蛋疼的XCode,相当的无语啊!一个月前就想尝试用xml来装我的数据了

就因为没找到添加库的选项,后来不了了之了。

iphone开发解析xml的库还是蛮多的,什么TouchXMLKISSXMLNSXML。。。一大堆的~

我第一次尝试使用的是KissXML,哈哈,这个名字可真够暧昧的

当时遇到的挫折就是作死不知道那几个Framework是怎么被添加进来的,是怎样样一个机制~

其实我java用比较熟练了,像添加jar包,类库什么的,我都比较了解了

当时心想Xcode里面可能也就差不多了,但是他妈的蛋疼的XCode里面,我就是没找到在哪儿添加~

话说XCode的菜单项可真够乱的,加上我现在又逢上XCode3x演变为4x

尼玛的,老子3xXCode都没摸热,现在4x的又来了一个大变样,你说我烦不烦?!

但是说实话,其实这种东西就是那种经验式的东西,已经了解,今后都不会再在这个上面耗费那么多时间了

上次是我练手随便玩儿,当时两下没整出来也就懒得搞了

今天专门抽空查了一个下午,nnd,终于给我找着了,这种遇见挫折并KO之的感觉真的爽!

像前两天为了FLash上面切割b2Shape的算法移植到iphone里面来,我可是花足了功夫

本来以为很简单的,但是凭着我的半担子C++硬是将预计的时间由一天拉长到4天,而且还是没日没夜那种~

当然,移植完毕花了2天多,但是噩梦还没有结束,因为Flash版的Box2DC++版的Box2D存在着比较大的差异~

恁是切不了几刀程序就陷入崩溃,愁地我那天一夜没睡,终于将所有经常报出的bug给修复好了

哈哈,在我面前的现在是一套成熟的,可运用于GameApp的算法,甚感欣慰!!我的目标是,一定要做出一个值得纪念的GameApp!!

闲话扯了很多,不过无所谓,因为,这是写给我自己今后留念的一个篇章~


回归重点,其实我的主题是如何在项目中使用libxml2.2.dylib~

翻开项目浏览器中的Frameworks文件夹,里面的item用的都是一个盒子状的物件

往下一个层级看,可以看到一个名为 Headers的文件夹,那么很明显了,这里的仅仅是一个个的头文件集合


VC里面差不多,如果要用lib格式的2进制静态库文件的话,需要将该静态库的头文件集合导入项目,否则的话无法使用!

这里是一个意思,其实经过我的操作,我发现这个真和VS2005里面没什么区别

这次之所以阴沟里翻船,也皆是因为不熟悉XCode这个IDE

推荐一个连接:http://www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml

粘贴一部分该链接里面找到的有用资料:

Integrating GDataXML

You can integrate GDataXML into a new project with a few easy steps:

  • 1.Choose Project\New Project, and choose View-based Application, and name the project XMLTest.
  • 2.Download the gdata-objective-c client library.
  • 3.Unzip the file, navigate to Source\XMLSupport, and drag the two files GDataXMLNode.h and GDataXMLNode.m into your project.
  • 4.In XCode, click Project\Edit Project Settings and make sure “All Configurations” are checked.
  • 5.Find the Search Paths\Header Search Paths setting and add /usr/include/libxml2 to the list.
  • 6.Finally, find the Linking\Other Linker Flags section and add -lxml2 to the list.
  • Test out that everything is working by adding the following to the top of XMLTestAppDelegate.h:

#import "GDataXMLNode.h"

If your app compiles and runs GDataXML is integrated successfully!

下面贴出几张图,这几张图里面标明了几个关键的位置以及相关配置,改好这几个点,解析xml的基石就算是铺垫完毕了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【原创】转帖请注明来源,谢谢 -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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值