IOS 学习笔记(Parse XML with GDataXMLNote)PART 5
本来我期望iOS原生的包里,有像NSJSONSerialization一样方便的,用于解析XML的工具,于是找到了NSXMLParser,结果发现它并不是一个完整的解析工具,而是一个需要手动实现解析细节的包,它只是负责逐个遍历节点,具体的装箱工作要我自己手动来达成,这也太不方便了~除非我要解析什么特定格式的数据,否则真是好麻烦啊,尤其它是需要通过实现 Delegate的方式实现,真的很不习惯。
于是找到了gdata-objectivec-client,是Google的开源项目,配置过程如下:
svn它的源代码,拷贝源码中XMLSupport文件夹下的两个文件到项目中:
为项目添加所需的libxml2.dylib库,打开配置项目配置页面–>Build Phases–>Link Binary With Libraries,用左下角的加号按钮添加库文件,输入libxml2,找到并添加它。
在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2”到路径中
然后添加“GDataXMLNode.h”文件到头文件中,此时编译如果遇到ARC错误,可以在Build Phases -> Compile sources,选择需要的文件,在右边Compile Flags输入-fno-objc-arc
自此,这个包已经可以正常工作了,不由得擦擦头上的汗,回想一下在AS项目里加一个swc是讷么地轻松,不过我认为随着XCode的发展,一定会有更方便的办法出现的。
下面就是代码解析的部分我的目标是用treehouse的示例代码显示我自己Blog的RSS,解析XML的部分代码如下:
NSURL *blogURL = [NSURL URLWithString:@"http://www.hector2.us/?feed=rss2"]; NSData *blogData = [NSData dataWithContentsOfURL:blogURL]; GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithData:blogData options:0 error:nil]; GDataXMLElement *rootElement = [xmlDoc rootElement]; NSArray *channels = [rootElement elementsForName:@"channel"]; GDataXMLElement *firstChannel =channels[0]; NSArray *items = [firstChannel elementsForName:@"item"]; self.blogPosts = [NSMutableArray array]; for (GDataXMLElement *element in items) { NSArray *titles = [element elementsForName:@"title"]; NSString *title = [(GDataXMLElement *)[titles objectAtIndex:0] stringValue]; BlogPost *bp = [BlogPost blogPostWithTitle:title]; NSArray *links = [element elementsForName:@"link"]; NSString *link = [(GDataXMLElement *)[links objectAtIndex:0] stringValue]; bp.url = [NSURL URLWithString:link]; [self.blogPosts addObject:bp]; }